在 Load Balancing 场景中,您需要使用 ChannelFactory 来创建通道还是可以直接打开连接?
In a Load Balancing scenario do you need to use ChannelFactory to create a channel or can you just Open the connection?
例如,如果您有一个部署在 2 台机器上并位于负载均衡器后面的 WCF 服务,您是否需要使用 ChannelFactory.CreateChannel() 创建一个通道,以便调用它或者可以您只是 Open() 连接而不创建通道?
我知道创建通道并重用它是最好的方法,因为创建通道是一项昂贵的操作。但在这种情况下,我只想知道是否仅使用 Open() 它应该仍然可以正常工作而没有问题
我知道有很多因素会影响这个:比如绑定类型、行为、负载均衡器配置、网络等。如果这个问题太笼统,我很抱歉那种情况请随时关闭它
一般来说,如果您重新使用一个通道并且您有一个支持粘性会话的负载平衡器,调用者亲和力将通过一个负载平衡的服务实例来维护。关闭然后重新创建通道会导致任何亲和力重置。
如果您不希望出现此行为并且正在使用 basicHttpBinding / webHttpBinding,那么如果您在绑定上禁用 HTTP keep alive,则通过同一通道进行的调用将进行负载平衡。这仅在 basicHttpBinding 或 webHttpBinding 上可用,因为它们是唯一不需要传输会话且完全无状态的绑定。
值得一提的是,如果您没有在负载均衡器上配置粘性会话,或者您在 wsHttp 或 wsDualHttp 绑定上禁用保持活动状态,那么您将收到错误消息,因为传输会话可能无法针对一台主机进行维护,即您实际上会在同一通道上获得负载平衡行为,这将打破这些绑定。 netTCP 也是如此,它也是有状态的。如果您关闭 wsHttp 绑定的安全性,它可能会退回到无状态,因为它是强制传输会话的安全要求,但我不知道。
来源:
例如,如果您有一个部署在 2 台机器上并位于负载均衡器后面的 WCF 服务,您是否需要使用 ChannelFactory.CreateChannel() 创建一个通道,以便调用它或者可以您只是 Open() 连接而不创建通道? 我知道创建通道并重用它是最好的方法,因为创建通道是一项昂贵的操作。但在这种情况下,我只想知道是否仅使用 Open() 它应该仍然可以正常工作而没有问题
我知道有很多因素会影响这个:比如绑定类型、行为、负载均衡器配置、网络等。如果这个问题太笼统,我很抱歉那种情况请随时关闭它
一般来说,如果您重新使用一个通道并且您有一个支持粘性会话的负载平衡器,调用者亲和力将通过一个负载平衡的服务实例来维护。关闭然后重新创建通道会导致任何亲和力重置。
如果您不希望出现此行为并且正在使用 basicHttpBinding / webHttpBinding,那么如果您在绑定上禁用 HTTP keep alive,则通过同一通道进行的调用将进行负载平衡。这仅在 basicHttpBinding 或 webHttpBinding 上可用,因为它们是唯一不需要传输会话且完全无状态的绑定。
值得一提的是,如果您没有在负载均衡器上配置粘性会话,或者您在 wsHttp 或 wsDualHttp 绑定上禁用保持活动状态,那么您将收到错误消息,因为传输会话可能无法针对一台主机进行维护,即您实际上会在同一通道上获得负载平衡行为,这将打破这些绑定。 netTCP 也是如此,它也是有状态的。如果您关闭 wsHttp 绑定的安全性,它可能会退回到无状态,因为它是强制传输会话的安全要求,但我不知道。
来源: