代码之家  ›  专栏  ›  技术社区  ›  Boris Lipschitz

ping WCF服务

wcf
  •  6
  • Boris Lipschitz  · 技术社区  · 15 年前

    我不希望使用IsAlive()方法修改服务契约。理想情况下,我希望WCF框架支持它。否则,我们的解决方案是通过添加“ServiceAdministration”服务来完成的,该服务托管在与上述服务相同的进程中。

    3 回复  |  直到 15 年前
        1
  •  19
  •   sipsorcery    15 年前

    telnet host 8080
    

    我要做的第二件事是始终将IsAlive方法添加到我的WCF契约中,这样就可以调用一个简单的方法来检查服务主机是否正常运行。

    public bool IsAlive() {
        return true;
    }
    
        2
  •  4
  •   marc_s HarisH Sharma    15 年前

    用户sipwiz的回答绝对是我的做法——介绍一种特定的方法,您可以调用该方法从WCF服务获得响应。

    .IsAlive() 将正确地报告“此服务一切正常”,但当您实际调用其中一个“真正的”worker方法时,很可能仍然会失败。

    基本上,如果你 真正地 如果想知道您的所有服务方法现在是否都可以调用,您必须使用一些测试数据调用它们中的每一个,或者找到其他方法来确定它们的后端系统是否处于“活动”状态。但是这样一个 .IsEverythingAlive() 方法可能会变成一个怪物,需要很长时间才能完成,但仍然不是真正有用的。。。。即使该方法返回“all fine”,一微秒后,当您真正的调用传入时,其中一个后端系统可能已经死了。

    因此,虽然.IsAlive()为您提供了一种快速简便的方法来确定您是否能够实际访问自己的服务,但它并不能保证您真正的调用会成功—您只是无法真正检查。。。。您必须始终假设它将失败,并处理失败和/或超时的可能性。

        3
  •  1
  •   Jeff    15 年前

    因此,如果您的服务是/service.svc,请尝试对/service.svc?wsdl的HTTP请求。如果您得到有效的200响应,服务应该可用。

    -杰夫