1

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

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

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

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

4

1 回答 1

2

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

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

于 2012-10-02T10:03:48.137 回答