WCF:TCP.NET上的多个绑定

时间:2011-05-27 06:41:30

标签: c#-4.0 iis-7.5 wcf-binding net.tcp

我正在尝试使用多个tcp.net绑定在IIS 7.5下设置一个网站。

由于服务位于负载均衡器之后,我需要为服务提供多个端点:

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上有多个绑定名称)?

2 个答案:

答案 0 :(得分:1)

根据documentation使用 multipleSiteBindingsEnabled 告诉WCF忽略任何<baseAddressPrefixFilters>

&#34;对于HTTP和非HTTP协议,当使用此设置启用多个站点绑定时,将忽略任何baseAddressPrefixFilters设置。&#34;

因此,这个配置与自身相矛盾,您指定地址前缀并同时指示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>

我认为 multipleSiteBindingsEnabled 最适合您只对使用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>

希望这有助于其他人:)

答案 1 :(得分:0)

据我所知,这是不可能的:

如果有人找到解决方案,请分享......