【问题标题】:WCF - How to detect if server is alive?WCF - 如何检测服务器是否还活着?
【发布时间】:2009-11-17 08:21:06
【问题描述】:

我正在开发一个带有 net tcp 绑定的客户端/服务器应用程序,如果我与服务器的连接中断,我需要得到通知。

如果客户端断开连接,我可以从服务器端立即使用 CommunicationObject 检测到它。故障事件(可靠会话关闭)。但是,从客户端来看,我似乎无法知道服务器是否出现故障。同样的事件不会触发。顺便说一句,我将 receiveTimeout 设置为无限。有人建议使用心跳或 ping 功能来检查服务器是否处于活动状态。但我认为在 WCF 层面,这样的方法会产生很大的影响。毕竟这不是您发送的简单数据包,而是整个 WCF 请求。我该怎么办?

【问题讨论】:

  • 相关问题:stackoverflow.com/questions/881754/…>

标签: wcf


【解决方案1】:

似乎有一种常见的误解,即为了在客户端查明 WCF 会话是否仍然存在,必须在服务上实现某种自定义 ping 或心跳操作。但是,如果配置正确,WCF 框架已经在后台为您执行此操作。

诀窍是将 ReliableSession.InactivityTimeout 设置为足够短的时间段。例如,如果您将其设置为 30 秒,则 ICommunicationObject.Faulted 事件将在 30(最小值)到 appr 之后在客户端代理上引发。服务中断后 45(最大)秒。确切的延迟取决于 WCF 内部会话保持活动控制计时器的节奏和故障的具体时间。

当然,这仅适用于具有可靠会话能力的bindings,并结合正确的会话属性(ServiceContractAttribute.SessionMode、ServiceBehaviorAttribute.InstanceContextMode、OperationContractAttribute.IsInitiating 和 OperationContractAttribute.IsTerminating)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 2012-04-05
    • 2016-03-07
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多