我有两个通过双工WCF连接连接的应用程序。只要连接一致,我工作得很好。
我正在检查如何处理重新连接方案,当连接丢失并且必须重新连接时。而且我很难理解如何在WCF中解决这个问题。
据我所知,IChannel
是可以消耗的,但ChannelFactory
是昂贵的。所以我创建了一个工厂,然后是通道。每当我检测到频道中的Closed
或Faulted
事件时,我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中处理断开连接/重新连接的正确方法是什么?
答案 0 :(得分:1)
我不会说这是做事的正确方法,但......
我处理断开连接/重新连接的方法是使用计时器(在客户端上)通过现有连接在服务上调用“ping”方法,并在需要时重新创建它。不知道是否有更好的方式,而不是我没看。
我的问题是连接正在静默丢失,客户端最终听到了死线并错过了通知。
答案 1 :(得分:0)
试着回答这一部分:
“工厂本身如何以这种方式出现故障,这怎么可能?”
如果您是IIS托管您的应用程序,您的应用程序池可能会被回收导致此行为。 您检查日志以确认这是否是根本原因。