C# WCF服务-协议';https';不支持
我正在使用WsHttpBinding和SSL证书开发一个WCF服务以实现安全性。在我的本地IIS中工作得很好,但是当我发布时,会收到以下错误消息: 不支持协议“https” 这是我的web.config文件C# WCF服务-协议';https';不支持,c#,wcf,iis,ssl,wcf-security,C#,Wcf,Iis,Ssl,Wcf Security,我正在使用WsHttpBinding和SSL证书开发一个WCF服务以实现安全性。在我的本地IIS中工作得很好,但是当我发布时,会收到以下错误消息: 不支持协议“https” 这是我的web.config文件 <system.serviceModel> <services> <service name="PeopleService.Service.PeopleService"> <host> <baseAddresses
<system.serviceModel>
<services>
<service name="PeopleService.Service.PeopleService">
<host>
<baseAddresses>
<add baseAddress="https://www.mywebsite.com/service/"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="BasicBinding" contract="PeopleService.Service.IPeopleService" name="BasicEndpoint"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="BasicBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
我正在使用ServiceHost工厂添加端点,以便可以从物理文件而不是从证书存储加载SSL证书
public class PeopleServiceHost : ServiceHost
{
public PeopleServiceHost(params Uri[] addresses) : base(typeof(PeopleService), addresses)
{
}
protected override void InitializeRuntime()
{
Description.Behaviors.Find<ServiceDebugBehavior>().IncludeExceptionDetailInFaults = true;
Description.Behaviors.Find<ServiceDebugBehavior>().HttpsHelpPageUrl = new Uri("https://www.mywebsite.com/service/PeopleService.svc/mex");
ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior();
metadataBehavior.HttpsGetEnabled = true;
metadataBehavior.HttpsGetUrl = new Uri("https://www.mywebsite.com/service/PeopleService.svc/mex");
Description.Behaviors.Add(metadataBehavior);
var serviceCredentials = new ServiceCredentials();
serviceCredentials.ServiceCertificate.Certificate = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + "\\mywebsite.pfx", "password123", X509KeyStorageFlags.MachineKeySet);
Description.Behaviors.Remove((typeof(ServiceCredentials)));
Description.Behaviors.Add(serviceCredentials);
base.InitializeRuntime();
}
}
公共类PeopleServiceHost:ServiceHost
{
公共PeopleServiceHost(参数Uri[]地址):基(类型(PeopleService),地址)
{
}
受保护的覆盖无效初始值设定项时间()
{
Description.Behaviors.Find().IncludeExceptionDetailInFaults=true;
Description.Behaviors.Find().HttpsHelpPageUrl=新Uri(“https://www.mywebsite.com/service/PeopleService.svc/mex");
ServiceMetadataBehavior metadataBehavior=新ServiceMetadataBehavior();
metadataBehavior.HttpsGetEnabled=true;
metadataBehavior.HttpsGetUrl=新Uri(“https://www.mywebsite.com/service/PeopleService.svc/mex");
Description.Behaviors.Add(metadataBehavior);
var servicecdentials=新servicecdentials();
serviceCredentials.ServiceCertificate.Certificate=new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory+“\\mywebsite.pfx”、“password123”、X509KeyStrageFlags.MachineKeySet);
Description.Behaviors.Remove((typeof(servicecdentials)));
Description.Behaviors.Add(serviceCredentials);
base.InitializeRuntime();
}
}
我已经试着解决这个问题好几天了,但都没有用。我已经通过主机联系过了,他们建议我在IIS中肯定支持并启用HTTPS
非常感谢您的帮助。谢谢。您发布的环境设置、负载平衡、其他路由如何?抱歉,我不知道具体细节,但我相信有一个负载平衡器在使用是的。我可以找出是否需要。如果请求跳转到http,这可能是您的问题。很有可能,但乍一看,你所拥有的一切似乎都很好。我怀疑可能是这样,我读过一些人说类似的话。我会问主持人是否可以,这是主持人的回答。“负载平衡器通过HTTP将流量发送到后端web服务器。HTTPS由负载平衡器处理。”我假设这就是问题所在,后端流量必须通过HTTPS?