双工WCF中的重新连接方案

时间:2014-01-27 16:17:55

标签: .net wcf nettcpbinding duplex-channel

我有两个通过双工WCF连接连接的应用程序。只要连接一致,我工作得很好。

我正在检查如何处理重新连接方案,当连接丢失并且必须重新连接时。而且我很难理解如何在WCF中解决这个问题。

据我所知,IChannel是可以消耗的,但ChannelFactory是昂贵的。所以我创建了一个工厂,然后是通道。每当我检测到频道中的ClosedFaulted事件时,我try关闭频道,取消事件处理程序,然后创建另一个频道。

但是这种方法效果不佳,因为有时DuplexChannelFactory<T>.CreateChannel也会出现故障,并抛出此异常:

System.ServiceModel.CommunicationObjectAbortedException occurred
  HResult=-2146233087
  Message=The communication object, System.ServiceModel.InstanceContext, cannot be used for communication because it has been Aborted.   

工厂本身如何以这种方式出现故障,这怎么可能?

在WCF中处理断开连接/重新连接的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

我不会说这是做事的正确方法,但......

我处理断开连接/重新连接的方法是使用计时器(在客户端上)通过现有连接在服务上调用“ping”方法,并在需要时重新创建它。不知道是否有更好的方式,而不是我没看。

我的问题是连接正在静默丢失,客户端最终听到了死线并错过了通知。

答案 1 :(得分:0)

试着回答这一部分:

“工厂本身如何以这种方式出现故障,这怎么可能?”

如果您是IIS托管您的应用程序,您的应用程序池可能会被回收导致此行为。 您检查日志以确认这是否是根本原因。