尽管对web配置和主机工厂进行了更改,但仍会收到WCF错误

尽管对web配置和主机工厂进行了更改,但仍会收到WCF错误,wcf,wcf-binding,wcf-security,Wcf,Wcf Binding,Wcf Security,在我的developer box上,我的WCF服务运行良好,没有问题,但是当我在共享服务器上部署它时,当我尝试访问我的服务时,会收到以下错误消息 https://www.mydomain.com/Admin/myservice/service.svc: 由于以下原因,无法激活服务“/admin/myservice/service.svc” 编译期间出现异常。例外消息是:这是 集合已包含具有方案http的地址。可能有 此集合中每个方案最多一个地址。如果你的服务是 在IIS中托管时,可以通过设置

在我的developer box上,我的WCF服务运行良好,没有问题,但是当我在共享服务器上部署它时,当我尝试访问我的服务时,会收到以下错误消息

https://www.mydomain.com/Admin/myservice/service.svc:
由于以下原因,无法激活服务“/admin/myservice/service.svc” 编译期间出现异常。例外消息是:这是 集合已包含具有方案http的地址。可能有 此集合中每个方案最多一个地址。如果你的服务是 在IIS中托管时,可以通过设置 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' 使真实或具体化 “system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters”。 参数名称:item。;此集合已包含一个地址 使用方案http。在此模式中,每个方案最多只能有一个地址 收集如果您的服务托管在IIS中,则可以修复 设置问题 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' 使真实或具体化 “system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters”。 参数名称:item

以下是相关的web.config配置:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="https://www.mydomain.com/"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

以下是我的主机出厂代码:

public class MyServiceServiceHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        ServiceHost serviceHost = null;

        serviceHost = CreateMyServiceServiceHost(baseAddresses);

        return serviceHost;
    }

    private static ServiceHost CreateMyServiceServiceHost(Uri[] baseAddresses)
    {
        // initialize service host
        ServiceHost serviceHost = new ServiceHost(typeof(OrderServices), baseAddresses);

        // create and add service endpoint binding using message and user name
        WSHttpContextBinding wsHttpContextEndpointBinding = new WSHttpContextBinding(SecurityMode.TransportWithMessageCredential);
        wsHttpContextEndpointBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
        wsHttpContextEndpointBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
        wsHttpContextEndpointBinding.AllowCookies = true;

        // add meta data service
        ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior();
        metadataBehavior.HttpGetEnabled = false;
        metadataBehavior.HttpsGetEnabled = true;
        metadataBehavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;

        ServiceAuthorizationBehavior serviceAuthorizationBehavior =
        serviceHost.Description.Behaviors.Find<ServiceAuthorizationBehavior>();
        serviceAuthorizationBehavior.PrincipalPermissionMode = PrincipalPermissionMode.UseAspNetRoles;

        ServiceDebugBehavior serviceDebugBehavior =
        serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
        serviceDebugBehavior.IncludeExceptionDetailInFaults = true;

        ServiceCredentials serviceCredentials = new ServiceCredentials();
        serviceCredentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
        serviceCredentials.UserNameAuthentication.CustomUserNamePasswordValidator =
            new MyServiceUserNamePasswordValidator((MyServiceMembershipProvider) Membership.Providers["MyServiceMembershipProvider"]);

        serviceHost.Description.Behaviors.Add(metadataBehavior);
        serviceHost.Description.Behaviors.Add(serviceCredentials);

        serviceHost.AddServiceEndpoint(typeof(IOrderServices), wsHttpContextEndpointBinding, "");

        // Add MEX endpoint
        serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpsBinding(), "mex");
        return serviceHost;
    }
}
公共类MyServiceServiceHostFactory:ServiceHostFactory
{
受保护的重写ServiceHost CreateServiceHost(类型serviceType,Uri[]baseAddresses)
{
ServiceHost ServiceHost=null;
serviceHost=CreateMyServiceServiceHost(基本地址);
返回服务主机;
}
专用静态ServiceHost CreateMyServiceServiceHost(Uri[]基本地址)
{
//初始化服务主机
ServiceHost ServiceHost=新的ServiceHost(typeof(OrderServices),baseAddresses);
//使用消息和用户名创建和添加服务端点绑定
WSHttpContextBinding wsHttpContextEndpointBinding=新的WSHttpContextBinding(SecurityMode.TransportWithMessageCredential);
wsHttpContextEndpointBinding.Security.Message.ClientCredentialType=MessageCredentialType.UserName;
wsHttpContextEndpointBinding.Security.Transport.ClientCredentialType=HttpClientCredentialType.None;
wsHttpContextEndpointBinding.AllowCookies=true;
//添加元数据服务
ServiceMetadataBehavior metadataBehavior=新ServiceMetadataBehavior();
metadataBehavior.HttpGetEnabled=false;
metadataBehavior.HttpsGetEnabled=true;
metadataBehavior.MetadataExporter.PolicyVersion=PolicyVersion.Policy15;
ServiceAuthorizationBehavior ServiceAuthorizationBehavior=
serviceHost.Description.Behaviors.Find();
serviceAuthorizationBehavior.PrincipalPermissionMode=PrincipalPermissionMode.UseAspNetRoles;
ServiceDebugBehavior ServiceDebugBehavior=
serviceHost.Description.Behaviors.Find();
serviceDebugBehavior.IncludeExceptionDetailInFaults=true;
ServiceCredentials ServiceCredentials=新的ServiceCredentials();
serviceCredentials.UserNameAuthentication.UserNamePasswordValidationMode=UserNamePasswordValidationMode.Custom;
serviceCredentials.UserNameAuthentication.CustomUserNamePasswordValidator=
新的MyServiceUserNamePasswordValidator((MyServiceMembershipProvider)成员资格。提供者[“MyServiceMembershipProvider”]);
serviceHost.Description.Behaviors.Add(metadataBehavior);
serviceHost.Description.Behaviors.Add(serviceCredentials);
AddServiceEndpoint(typeof(IOrderServices),wsHttpContextEndpointBinding,“”);
//添加MEX端点
serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,MetadataExchangeBindings.CreateMexHttpsBinding(),“mex”);
返回服务主机;
}
}

为什么我会犯这个错误?每一份技术文档都说明我是根据文档正确操作的。这可能与SSL问题或主机名问题有关吗?这让我感到困惑。

我找到了一个解决方案,尽管目前还不足以解决问题。如果您正在运行.NET 4并保证运行它,则添加以下配置:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="https://www.mydomain.com/"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

我找到了一个解决方案,尽管目前还不足以解决问题。如果您正在运行.NET 4并保证运行它,则添加以下配置:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="https://www.mydomain.com/"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

如果您正在使用localhost并使用framework 4.0,请通过以下设置仅使用一个端点:

<serviceHostingEnvironment multipleSiteBindingsEnabled="False" />


使用此选项,它将运行。

如果您在本地主机上工作并使用framework 4.0,请通过设置以下选项仅使用一个端点:

<serviceHostingEnvironment multipleSiteBindingsEnabled="False" />


使用此选项,它将运行。

在您的部署中,是否有其他web.config在链的更上游具有这些设置(即继承的web.config)?在您的部署中,是否有其他web.config在链的更上游具有这些设置(即继承的web.config)?