C# WCF服务的多个HTTPS端点
我有一个WCF服务,它使用两个端点:HTTP和https。 我需要添加另一个https端点,以便其中一个需要客户端证书,而另一个则不需要 如果添加新的https端点及其自己的基址,则会出现错误: System.ArgumentException:此集合已包含具有方案https的地址。此集合中每个方案最多只能有一个地址。如果您的服务托管在IIS中,则可以通过将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled”设置为true或指定“system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters”来修复此问题 我试着加上C# WCF服务的多个HTTPS端点,c#,wcf,https,endpoint,C#,Wcf,Https,Endpoint,我有一个WCF服务,它使用两个端点:HTTP和https。 我需要添加另一个https端点,以便其中一个需要客户端证书,而另一个则不需要 如果添加新的https端点及其自己的基址,则会出现错误: System.ArgumentException:此集合已包含具有方案https的地址。此集合中每个方案最多只能有一个地址。如果您的服务托管在IIS中,则可以通过将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEna
<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调用方法失败,无法调用服务。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来进行恢复。