在负载平衡方案中,您是否需要使用ChannelFactory来创建频道,还是只需打开连接?

时间:2017-03-08 13:04:00

标签: wcf load-balancing

例如,如果您有一台部署在2台计算机上的WCF服务并且位于负载均衡器后面,您是否需要使用ChannelFactory.CreateChannel()创建一个频道,以便调用它或者您可以打开( )没有创建频道的连接? 我知道创建频道并重新使用它是最好的方法,因为创建频道是一项昂贵的操作。但在这种情况下,我只想知道是否只使用Open()它仍然可以正常工作而没有问题

我知道有很多因素可以影响这个:比如绑定类型,行为,负载均衡器配置,网络等等。所以我很抱歉,如果这个问题过于通用,那么请感觉可以自由关闭

1 个答案:

答案 0 :(得分:1)

一般来说,如果您重新使用频道并且您有一个支持粘性会话的负载均衡器,则将使用一个负载均衡的服务实例维护呼叫者亲缘关系。关闭然后重新创建通道会导致重置任何亲和力。

如果您不想要这种行为并且您正在使用basicHttpBinding / webHttpBinding,那么如果您在绑定上禁用HTTP keep alive,那么通过相同通道进行的调用将进行负载平衡。这仅适用于basicHttpBinding或webHttpBinding,因为这些是唯一不需要传输会话且完全无状态的绑定。

值得一提的是,如果您没有在负载均衡器上配置粘性会话,或者您在wsHttp或wsDualHttp绑定上禁用了keep-alive,那么您将收到错误,因为传输会话可能不是针对一个主机进行维护,即您实际上将在同一个通道上获得负载平衡行为,这将破坏这些绑定。 netTCP也是如此,它也是有状态的。如果您关闭wsHttp绑定的安全性,它可能会回到无状态,因为它是强制执行传输会话的安全要求,但我不知道。

来源: