C# WCF-让客户端检查服务可用性

C# WCF-让客户端检查服务可用性,c#,.net,wcf,disconnect,C#,.net,Wcf,Disconnect,我有一个客户端-服务器系统,双方都由我编写,我希望在服务器断开连接/死亡时将客户端置于“脱机”状态,然后在服务器再次可用时自动将其恢复“联机” 对于第一部分,我监听通道故障事件,并通过将客户端设置为脱机来处理它。然后我开始在服务器上调用一个“ping”服务(每30秒一次),如果它是活动的,它只会返回一个bool。一旦激活,客户端就会收到bool并切换回在线状态 这一切都是可行的,我遇到的问题是,当客户端调用ping服务而服务器关闭时,没有发送响应(显然),最终,大约2分钟后,我得到一个端点未找到

我有一个客户端-服务器系统,双方都由我编写,我希望在服务器断开连接/死亡时将客户端置于“脱机”状态,然后在服务器再次可用时自动将其恢复“联机”

对于第一部分,我监听通道故障事件,并通过将客户端设置为脱机来处理它。然后我开始在服务器上调用一个“ping”服务(每30秒一次),如果它是活动的,它只会返回一个bool。一旦激活,客户端就会收到bool并切换回在线状态

这一切都是可行的,我遇到的问题是,当客户端调用ping服务而服务器关闭时,没有发送响应(显然),最终,大约2分钟后,我得到一个端点未找到异常。到目前为止,我已经尝试了3-4次ping,因此出现了3-4次异常

我的问题是,我如何才能更优雅地处理ping服务?理想情况下,我希望定期呼叫一个服务,让我知道它是否在线,并立即让我知道它是否在线

这个呢:

  • 如果检测到服务器断开连接,请进入“Ping”模式
  • 在“ping模式”中,您将客户端的“sendTimeout”设置为非常短的时间,例如大约2秒,因为您对服务的ping方法的调用应该几乎立即得到响应
  • “Ping”成功工作后,再次重新创建客户端代理,并将客户端的“sendTimeout”设置回原始值(默认值为1分钟-取决于对您有意义的时间,15秒、30秒-任意值)

这样,如果您处于“Ping模式”,您可以快速获得响应(或超时),并且可以快速检测服务的可用性。

谢谢Marc,好主意,这就是我所做的。我完全忘记了,可以像这样动态编辑绑定超时。如何检测服务器断开连接?@Ashutosh:如果服务器断开连接,您的呼叫将失败,并出现以下几种可能的错误之一(“未找到”或“超时”或othesr)关于
1)如何检测服务器断开连接的示例代码?2) 重新创建客户端代理3)设置客户端的“发送超时”
是否尝试过?有样本代码吗?可能ServiceContract使用Ping方法并测试
数据库连接、active directory、文件系统、电子邮件、Ftp、SFtp、SMS API等的可用性