C# WCF服务的多个HTTPS端点

C# WCF服务的多个HTTPS端点,c#,wcf,https,endpoint,C#,Wcf,Https,Endpoint,我有一个WCF服务,它使用两个端点:HTTP和https。 我需要添加另一个https端点,以便其中一个需要客户端证书,而另一个则不需要 如果添加新的https端点及其自己的基址,则会出现错误: System.ArgumentException:此集合已包含具有方案https的地址。此集合中每个方案最多只能有一个地址。如果您的服务托管在IIS中,则可以通过将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEna

我有一个WCF服务,它使用两个端点:HTTP和https。 我需要添加另一个https端点,以便其中一个需要客户端证书,而另一个则不需要

如果添加新的https端点及其自己的基址,则会出现错误:

System.ArgumentException:此集合已包含具有方案https的地址。此集合中每个方案最多只能有一个地址。如果您的服务托管在IIS中,则可以通过将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled”设置为true或指定“system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters”来修复此问题

我试着加上

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>

但这并没有起到任何作用——得到了同样的错误

如果使用相同的侦听Uri但不同的绑定配置添加新的https端点,则会出现错误:

System.InvalidOperationException:绑定实例已与侦听URI“”关联。如果两个端点想要共享同一个ListenUri,它们还必须共享同一个绑定对象实例

但是我需要两个不同的绑定—一个有客户端证书要求,另一个没有

可行吗

谢谢你

我已经弄明白了。 两个https端点必须使用相同的绑定类型,而不是相同的绑定配置,并且具有不同的名称,如:

  <system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding" />
    <binding name="HTTPSNoCert">
      <security mode="Transport" />
    </binding>
    <binding name="HTTPSWithCert">
      <security mode="Transport">
        <message clientCredentialType="Certificate" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="WcfServiceLibrary1.Service1">
    <endpoint address="b1" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding"
      name="BhttpEP" contract="WcfServiceLibrary1.IService1">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
    <endpoint address="bs1" binding="basicHttpBinding" bindingConfiguration="HTTPSNoCert"
      name="bHttpsEP1" contract="WcfServiceLibrary1.IService1" />
    <endpoint address="bs2" binding="basicHttpBinding" bindingConfiguration="HTTPSWithCert"
      name="bHttpsEP2" contract="WcfServiceLibrary1.IService1" />
    <host>
      <baseAddresses>
        <add baseAddress="http://myhostname:7654/b1" />
        <add baseAddress="https://myhostname:7655/b2" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>


我不知道如何在同一个URL上支持多个绑定。客户机和服务器如何知道使用哪种握手?你将不得不改变URL(稍微)和有两个端点定义。我想我可以使用两个不同的URL,但它似乎不允许我为同一个服务使用两个https URL。我说得太早了。服务启动,但使用https调用方法失败,无法调用服务。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来进行恢复。