2012-10-02 50 views
0

我正在开发客户端/服务器应用程序,其中客户端每隔几秒钟调用一次WCF服务。我没有使用IIS - 该服务作为控制台应用程序运行(打算将其作为生产系统上的Windows服务进行安装)。如何使用WCF netTcpBinding从通信/服务故障中恢复?

我开始了使用basicHttpBinding的,如果我停止服务(模拟通信/服务器发生故障),客户简单地忽略一个事实,即它不能连接到服务,通过处理获取引发的EndpointNotFoundException。重新启动服务后,客户端能够再次开始调用,并且一切都很好。

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

我怎么会去建立某种简历/恢复行为,类似于我用basicHttpBinding的看到了吗?

回答

1

,因为它出现了故障不能重用信道。你应该把你的客户端投到一个ICommunicationObject并调用Abort()来清理。

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

+0

作品像魅力谢谢! –