【问题标题】:Check availability of WCF Callback Service检查 WCF 回调服务的可用性
【发布时间】:2010-07-14 16:50:40
【问题描述】:

我有一个使用回调操作回调其客户端的服务。当服务出现故障时,是否有通知客户的方法?当客户端在回调过程中宕机时会引发异常,但随着服务宕机,订阅会丢失,但不会通知客户端。

WCF 是否支持一些心跳操作来检查服务的状态?

谢谢

【问题讨论】:

    标签: wcf


    【解决方案1】:

    不,没有“检查此服务调用是否会成功”之类的方法。

    您需要调用服务并准备好处理服务调用期间发生的任何异常。

    确实没有可靠或有用的方法来检查服务可用性。心跳可以检查的所有内容是您可以立即调用您的服务方法 - 但几分之一秒后,该连接可能会消失(电缆已拔出或切断,服务器已崩溃 - 出现问题的可能性是没完没了……)也是。它无法检查所有必要的后台服务和数据库等是否可用。

    所以实际上,这样的心跳检查是毫无意义的。只需致电服务,希望最好,并为最坏的情况做好准备!将您的服务调用包装在良好的异常处理中,然后继续。

    【讨论】:

    • 嗯,我正在考虑在客户端上维护一个计时器,该计时器在每次回调时重置为 0,如果计时器达到限制,例如 2 分钟,则发送心跳以检查服务器是否仍在运行。
    • @joblot:是的,当然,你可以这样做——但这真的告诉你什么? WCF 服务通常是“每次调用”的——每个请求都会获得一个处理其请求的新服务对象。做这个心跳只是证明每2分钟,你可以到达你的服务并调用一个方法。它没有说明真正的功能是否可以完成它们的工作,它没有说明你的服务是否会在 10 秒后可用。 WCF 服务类似于长时间打开的 ADO.NET 数据库连接。
    • 请检查此链接stackoverflow.com/questions/3255117/… 我希望这将使我想要实现的目标更加清晰。如果服务不可用,我只需要将错误记录到日志文件中。我假设使用 PerSession 实例和 SessionMode.Required 心跳请求将由相同的实例处理,如果没有回复,则服务有问题。好吧,至少可以在 inetrval 之后查询服务状态,而不是客户端等待回调,而无法重新建立连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多