【问题标题】:How to recover from a comms/service failure with WCF netTcpBinding?如何使用 WCF netTcpBinding 从通信/服务故障中恢复?
【发布时间】:2012-10-02 09:46:24
【问题描述】:

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

我开始使用 basicHttpBinding,如果我停止服务(以模拟通信/服务器故障),客户端通过处理抛出的 EndpointNotFoundException 简单地忽略它无法连接到服务的事实。重启服务后,客户端又可以开始调用了,一切正常。

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

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

【问题讨论】:

    标签: wcf nettcpbinding


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 2012-12-09
      相关资源
      最近更新 更多