【问题标题】:WCF: Multiple bindings on TCP.NETWCF:TCP.NET 上的多个绑定
【发布时间】:2011-09-03 04:08:41
【问题描述】:

我正在尝试在 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”来解决问题。 参数名称:项目

我也尝试将其添加到 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 上的多个绑定名称,由于负载平衡)?

【问题讨论】:

  • 我已经尝试同样的事情超过一天了,但没有任何成功。确实有很多关于如何为 http 做这件事的讨论,但对于 net.tcp 却没有。我开始怀疑这是不可能的。 cfr。此帖link“仅Http协议支持多站点绑定”
  • 这是可能的,但你必须小心你的配置和螺母over配置。

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


【解决方案1】:

根据documentation,使用multipleSiteBindingsEnabled 告诉WCF 忽略任何&lt;baseAddressPrefixFilters&gt;

“当使用此设置启用多个站点绑定时,对于 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>

我认为 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>

希望这对其他人有帮助:)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多