Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务-协议';https';不支持_C#_Wcf_Iis_Ssl_Wcf Security - Fatal编程技术网

C# WCF服务-协议';https';不支持

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

我正在使用WsHttpBinding和SSL证书开发一个WCF服务以实现安全性。在我的本地IIS中工作得很好,但是当我发布时,会收到以下错误消息:

不支持协议“https”

这是我的web.config文件

<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?