创建新的ChannelFactory<;T>;出现故障时

本文关键字:故障 gt ChannelFactory lt 创建 | 更新日期: 2023-09-27 17:58:14

重建ChannelFactory的最可靠方法是什么<T>当它进入故障状态时以线程安全的方式?这个场景具有预期的并发性(为了便于论证,假设有50个并发客户端)。我想知道一些实现这一目标的建议方法/想法/意见(或替代方案)。

编辑:

使用@Ladislav Mrnka的答案——似乎实现这一点最可靠的方法是为ChannelFactory<T>。我最终完成了这项工作,并公开了包装器的CreateChannel方法。

创建新的ChannelFactory<;T>;出现故障时

您认为此解决方案将如何帮助您?您将锁定该部分,以便只有一个线程可以进入该部分,检查ChannelFactory是否出现故障并重新创建它,但通道工厂的实例是共享的-您从属性返回它,因此:

  • 如果您进行了检查并创建了实例,那么其他线程可以在那之后接收工厂,并在您在初始线程中使用新工厂之前对其进行故障诊断(竞争条件)
  • 如果重新创建一个出现故障的工厂,则所有其他已经拥有引用的线程仍指向出现故障的那个

因此,该解决方案将确保以线程安全的方式重新创建ChannelFactory,但您仍然必须检查工厂是否在您想使用它的任何地方出现故障(这应该是线程安全的,才是可靠的)。

我想可靠的方法是围绕ChannelFactory创建包装器,并通过线程安全处理所有复杂性,并检查包装器内的故障工厂。包装器将公开CreateChannel方法和您需要的所有其他方法。您可以使用这样的包装器来管理多个工厂。

这两个创建WCF ChannelFactory<T>和WCF客户端"使用"块问题的最佳解决方法是什么?精彩的讨论帮助我建立了自己的WCF服务。我相信你们也会从中受益匪浅。两者都包括对您问题的直接回答:)