我正在开发一个客户端/服务器应用程序,其中客户端每隔几秒钟调用一次WCF服务。我没有使用IIS - 该服务作为控制台应用运行(旨在将其作为Windows服务安装在生产系统上)。
我开始使用basicHttpBinding,如果我停止服务(模拟通信/服务器故障),客户端只需忽略它无法连接到服务的事实,通过处理获得的EndpointNotFoundException
抛出。重新启动服务后,客户端可以再次开始调用它,一切都很好。
我现在已经切换到使用netTcpBinding了,这次当我停止服务时,它的控制台窗口关闭需要一点时间(可能是由于TCP管理连接的方式,最终超时)。此时客户端获得CommunicationException
(“套接字连接已中止”)。当我重新启动服务时,客户端无法像使用basicHttpBinding那样“恢复”。每次尝试调用服务时,它都会抛出CommunicationObjectFaultedException
(“通信对象,System.ServiceModel.Channels.ServiceChannel,因为它处于Faulted状态而不能用于通信。”)。
我将如何构建某种简历/恢复行为,类似于我在basicHttpBinding中看到的那样?
答案 0 :(得分:2)
您无法重复使用该频道,因为它已出现故障。您应该将客户端转换为ICommunicationObject并调用Abort()进行清理。
之后,您只需通过创建新的客户端频道重新开始。如果服务器停机一段时间,您可能希望在计时器上执行此操作。