微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c#-4.0 – WCF:TCP.NET上的多个绑定

我试图在IIS 7.5下建立一个具有多个tcp.net绑定的网站.

由于服务是在负载均衡器后面,我需要多个服务端点:

log.o1881.no/log/service.svc

log.core1.o1881.no/log/service.svc

这在我在web.config中配置时适用于http绑定:

<system.serviceModel>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

将以下tcp.net绑定添加站点时,将显示以下错误消息:

808:log.o1881.no

808:log.core1.o1881.no

‘/ Log’应用程序中的服务器错误.

此集合已包含方案net.tcp的地址.此集合中每个方案最多只能有一个地址.如果您的服务是在IIS中托管的,则可以通过将’system.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled’设置为true或指定’system.serviceModel / serviceHostingEnvironment / baseAddressprefixFilters’来解决问题.
参数名称:item

我还尝试将其添加到web.config

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
  <baseAddressprefixFilters>
    <add prefix="net.tcp://log.o1881.no:808/log" />
    <add prefix="net.tcp://log.core1.o1881.no:808/log" />
  </baseAddressprefixFilters>
</serviceHostingEnvironment>

但这不起作用.

由于该服务将部署在多个服务器上,我非常希望能够通过配置和IIS设置来完成这项工作,而不是代码.

这是可能做的,还是有另一种方法来处理这种情况(http和net.tcp上的多个绑定名称,由于负载均衡)?

解决方法

根据 documentation,使用multipleSiteBindingsEnabled告诉WCF忽略任何< baseAddressprefixFilters>.

“当使用此设置启用多个站点绑定时,对于HTTP和非HTTP协议,将忽略任何baseAddressprefixFilters设置.”

因此,这个配置与自身相矛盾,您指定地址前缀并同时指示WCF忽略它们,因为您指定了multipleSiteBindingsEnabled.

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
  <baseAddressprefixFilters>
    <add prefix="net.tcp://log.o1881.no:808/log" />
    <add prefix="net.tcp://log.core1.o1881.no:808/log" />
  </baseAddressprefixFilters>
</serviceHostingEnvironment>

我认为multipSiteBindingsEnabled最适合您只对使用HTTP方案感兴趣的场景.

否则不要使用它,实际上你可以在同一个IIS站点/应用程序层次结构中的不同端口上有多个tcp.net绑定.

<serviceHostingEnvironment>
  <baseAddressprefixFilters>
    <add prefix="net.tcp://log.o1881.no:808/log" />
    <add prefix="net.tcp://log.core1.o1881.no:808/log" />
  </baseAddressprefixFilters>
</serviceHostingEnvironment>

希望这有助于其他人:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐