2

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

我现在正在检查如何处理重新连接的情况,当连接丢失并且必须重新连接时。我正在努力理解如何在 WCF 中解决这个问题。

据我所知,这IChannel是消耗品,但ChannelFactory价格昂贵。所以我创建了一个工厂,然后是通道。每当我检测到通道中的ClosedorFaulted事件时,我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 中处理断开/重新连接的正确方法是什么?

4

2 回答 2

1

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

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

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

于 2014-01-28T18:31:47.370 回答
0

试图回答这部分:

“工厂本身怎么可能出现这种故障?”

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

于 2014-01-27T18:16:26.153 回答