【问题标题】:WCF: How do I check server is accessible?WCF:如何检查服务器是否可访问?
【发布时间】:2011-03-23 09:58:20
【问题描述】:

我有 WCF 服务器和 WCF 客户端。部署新版本的客户端时,我想检查它是否已准备好运行,因此我必须检查服务器是否在线。

我不想做任何真正的服务器调用(因为调用可以改变生产数据)或在服务器上创建空的 {...} “测试”方法什么都不做。

是否可以检查 WCF 服务器端点是否存在并在没有方法调用的情况下侦听连接?

我试过了:

factory = new ChannelFactory<IServer>())
factory.CreateChannel();

factory = new ChannelFactory<IServer>())
factory.Open();

但如果服务器离线,也不例外。 如果没有服务器方法调用,我应该如何检查服务器是否存在?

提前感谢您!

【问题讨论】:

    标签: .net wcf client-server


    【解决方案1】:

    不,没有办法在不调用端点的情况下检查端点是否正在监听。客户端可能无法连接到端点的原因有很多种,因此唯一确定的方法是进行调用。另请记住,端点可能随时无法访问,因此客户端需要为此做好准备。

    所以你有两个选择:

    1. 过去,我在我的服务上添加了一个 Ping 方法,它只返回 true。但这只会告诉您该服务当时可用。
    2. 作为一种更可靠的机制,我可能会在每个服务调用 (EndpointNotFoundException IIRC) 上捕获相关的 WCF 异常并从中推断出故障。这允许您容忍随着时间的推移可能发生的故障 - 例如,在初始连接之后。

    【讨论】:

    • @Andrew,刚刚更新了我的答案 - 原因是您需要保持 Pinging 以确保服务仍然正常。尝试拨打电话并查看是否成功要容易得多。
    • +1 完全正确 - 即使在您的服务上使用 Ping 方法也不能保证在几分之一秒内的下一个服务调用会成功 - 所以它真的不能说明你什么都...只需调用服务并准备处理可能发生的任何可能的异常!
    • 好的,谢谢大家,但我只需要在客户端部署后检查服务器是否在线 :)
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 2011-08-22
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2018-09-08
    相关资源
    最近更新 更多