2009-08-05 65 views
11

我有一个客户端 - 服务器系统,双方都是由我编写的,并且我希望在服务器断开/连接时自动将客户端置于“离线”状态当服务器再次可用时,他们返回'在线'。WCF - 客户端检查服务可用性

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

这一切工作,我遇到的问题是,当客户端调用ping服务和服务器关闭,没有响应发送(显然),并最终约2分钟后,我得到一个端点没有发现异常。到目前为止,我已经尝试过3-4次ping,因此有3-4次例外酿造。

我的问题是,我该如何处理更优雅的ping服务?理想情况下,我想定期拨打一个服务,让我知道它是否在线,并立即告诉我是否不在线。

感谢, 威尔

回答

12

这个怎么样:

  • 如果发现服务器断开连接,进入“平安”模式中的“查询模式”
  • ,将客户端设置的“ sendTimeout“的东西很短,例如例如2秒左右,因为您拨打服务Ping方法的电话应该几乎立即应答
  • 一旦您的“Ping”成功工作,您再次重新创建客户端代理并将客户端的“sendTimeout”设置回原始值(默认值为1分钟 - 取决于什么是有道理的,你15秒,30秒 - 无论)如果你在“平安模式”是

这样一来,你会得到你的答复(或超时)快速,您可以快速检测到服务的可用性。

Marc

+0

谢谢马克,好主意这是我所做的。我完全忘记了可以像这样在飞行中编辑绑定超时。 – WillH 2009-08-06 14:48:16

+0

如何检测服务器是否断开连接? – 2016-02-03 10:57:27

+0

@Ashutosh:如果服务器断开连接,您的呼叫将失败,并有几个可能的错误之一(“未找到”或“超时”或其他) – 2016-02-03 12:03:07

相关问题