我有一个 WCF 服务端点,它使用具有不同地址的 WsHttpBinding 和 BasicHttpBinding 来允许它们共享端点。BasicHttpBinding 没有安全性。当我的服务和客户端在同一台机器上时,BasicHttpBinding 工作正常。当它们在不同的机器上时,BasicHttpBinding 失败,并且我在服务的跟踪日志中收到此错误:未提供服务证书。在 ServiceCredentials 中指定服务证书。
如果我从服务的配置中删除 WsHttpBinding,该错误将停止发生。
服务的 web.config:
<bindings>
<basicHttpBinding>
<binding name="MyBasicBinding"
maxBufferPoolSize="5242880"
maxReceivedMessageSize="5242880" />
</basicHttpBinding>
<wsHttpBinding>
<binding name="MyWsBinding"
bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="5242880"
maxReceivedMessageSize="5242880"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="Message">
<message clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="MyService">
<endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="MyBasicBinding"
contract="MyFramework.IMyService" bindingNamespace="http://MyFramework/Services/"/>
<!-- The basic binding fails when the WS binding is present.
If I remove the WS binding, the basic binding will work. -->
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyWsBinding"
contract="MyFramework.IMyService" bindingNamespace="http://MyFramework/Services/"/>
</service>
</services>
仅供参考,我为基本绑定使用了不同的地址,这允许 2 个绑定共享相同的端点。WsHttpBinding 的 URL 是http://server/MyService.svc
,BasicHttpBinding 的 URL 是http://server/MyService.svc/basic
。
为什么 WsHttpBinding 的存在会强制 BasicHttpBinding 期待证书?