1

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

编辑:

使用@Ladislav Mrnka 的答案 - 似乎最可靠的方法是为 ChannelFactory<T> 创建一个包装器。我最终这样做了,并公开了包装器的 CreateChannel 方法。

4

2 回答 2

4

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

  • 如果您进行检查并创建实例,则其他线程可以在此之后接收工厂并在您在初始线程中使用新工厂之前对其进行故障处理(竞争条件)。
  • 如果您重新创建故障工厂,所有其他已持有该引用的线程仍指向故障工厂。

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

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

于 2011-06-03T07:47:49.407 回答
3

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

于 2011-06-03T06:05:14.690 回答