出现故障</t>时创建新的ChannelFactory <t>

时间:2011-06-03 05:05:17

标签: c# multithreading wcf thread-safety channelfactory

重建ChannelFactory&lt; T&gt;的最可靠方法是什么?当它进入故障状态时以线程安全的方式?这种情况具有预期的并发性(假设参数为50个并发客户端)。我想知道一些推荐的方法/想法/意见,以实现这一目标(或替代方案)。

编辑:

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:3)

这两个 creating WCF ChannelFactory<T>What is the best workaround for the WCF client `using` block issue? 精彩的讨论帮助我建立了自己的防弹WCF服务。 我相信你也会从中受益匪浅。 两者都包括对你的问题的直接回答:)