如何使用WCF netTcpBinding从通信/服务故障中恢复?

时间:2012-10-02 09:46:24

标签: wcf nettcpbinding

我正在开发一个客户端/服务器应用程序,其中客户端每隔几秒钟调用一次WCF服务。我没有使用IIS - 该服务作为控制台应用运行(旨在将其作为Windows服务安装在生产系统上)。

我开始使用basicHttpBinding,如果我停止服务(模拟通信/服务器故障),客户端只需忽略它无法连接到服务的事实,通过处理获得的EndpointNotFoundException抛出。重新启动服务后,客户端可以再次开始调用它,一切都很好。

我现在已经切换到使用netTcpBinding了,这次当我停止服务时,它的控制台窗口关闭需要一点时间(可能是由于TCP管理连接的方式,最终超时)。此时客户端获得CommunicationException“套接字连接已中止”)。当我重新启动服务时,客户端无法像使用basicHttpBinding那样“恢复”。每次尝试调用服务时,它都会抛出CommunicationObjectFaultedException“通信对象,System.ServiceModel.Channels.ServiceChannel,因为它处于Faulted状态而不能用于通信。”)。

我将如何构建某种简历/恢复行为,类似于我在basicHttpBinding中看到的那样?

1 个答案:

答案 0 :(得分:2)

您无法重复使用该频道,因为它已出现故障。您应该将客户端转换为ICommunicationObject并调用Abort()进行清理。

之后,您只需通过创建新的客户端频道重新开始。如果服务器停机一段时间,您可能希望在计时器上执行此操作。