【发布时间】:2012-01-01 18:58:11
【问题描述】:
在我的开发者机器上,我的 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'。 参数名称:项目
这是相关的 web.config 配置:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
<baseAddressPrefixFilters>
<add prefix="https://www.mydomain.com/"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
这是我的主机工厂代码:
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;
}
}
为什么会出现此错误?每个技术文档都说我按照文档正确地做事。这可能与 SSL 问题或主机名问题有关吗?这让我很难过。
【问题讨论】:
-
在您的部署中,是否可能还有另一个具有这些设置的 web.config(即继承的 web.config)?
标签: wcf wcf-binding wcf-security