关于上一个问题:Tell when wcf client lost connection其中一位评论者说:
您的服务不应该关心网络电缆是否断开连接。 TCP的一个特性是,除非有人正在主动发送数据,否则它 可以容忍网络连接中的瞬间中断。
在WCF中更是如此,其中有额外的层 框架,以帮助保护您免受网络不可靠。
我遇到了无法正常工作的问题。我有WCF客户端使用DuplexChannelFactory建立与服务器的连接。连接保持打开状态3分钟。我断开客户端与互联网的连接并重新连接。客户端重新获得Internet连接,但是从服务器到该客户端的任何调用都会失败。一旦客户端重新连接,它就会再次开始工作。
当我拔掉互联网上的插头时,客户端会抛出几个例外,但该频道仍然被列为处于打开状态。一旦重新获得连接并且我从服务器向客户端发出请求,我就会收到以下错误:通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它已被中止。< /强>
显然,如果请求在客户端离线时进入,它将无法正常工作,但我正在努力获取它,以便一旦互联网回来而无需设置新连接,此频道将恢复。
根据我上面列出的评论,这应该按原样运作吗?或者有什么我需要改变以使其真正起作用吗?
答案 0 :(得分:0)
这里的问题是您尝试使用的频道处于故障状态,不能再使用(如错误信息所示)。
您的客户端需要捕获(捕获)该异常,然后中止当前通道并创建一个新通道。 WCF不会自动为您执行此操作,您必须自己编写代码。
您还可以检查频道的CommunicationState
以查看其是否出现故障,并以此方式恢复。
最后一个选项是使用OnFaulted
事件处理程序,当频道出现故障时,中止频道并创建一个新频道。