Ping WCF服务

时间:2009-07-06 02:49:33

标签: wcf

检查WCF服务是否可用的最有效方法是什么。 (Ping)它假设是绑定配置独立。

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

3 个答案:

答案 0 :(得分:19)

我做的两件事是telnet检查,以确保WCF进程打开套接字。

telnet host 8080

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

public bool IsAlive() {
    return true;
}

答案 1 :(得分:4)

用户sipwiz答案绝对是我的方式 - 介绍一种特定的方法,您可以调用该方法来获取WCF服务的响应。

但是,请注意这里的一些限制:这只会证明您的客户能够调用您的服务代码。这对你来说可能足够好 - 完美。但根据我的经验,真正的麻烦在于其他服务方法很可能会调用其他服务和/或数据库,或者您实际执行的工作是什么。这些系统也可能无法访问/不可用,在这种情况下,您的.IsAlive()将正确报告“此服务完全正常”,但当您实际调用其中一个“真正的”工作方法时,这可能仍然很好失败。

基本上,如果确实想要知道您的所有服务方法是否可以立即调用,您必须使用一些测试数据调用每个方法,或者找一些其他方法来查找他们的后端系统是否“活着”。但是这样的.IsEverythingAlive()方法可能会变成一个怪物并且需要很长时间才能完成并且仍然没有真正有用......即使该方法返回“一切正常”,一分钟后你的真实通话进来后,其中一个后端系统可能已经死了。

因此,虽然.IsAlive()为您提供了一种快速简便的方法来确定您是否可以实际获得自己的服务,但这并不能保证您的真实呼叫能够成功 - 您无法真正检查到这一点。 ..你必须总是假设它会失败并处理失败和/或超时的可能性。

马克

答案 2 :(得分:1)

如果是“已发布的”WCF服务,您应该能够请求WSDL架构,该架构通常由服务动态生成。因此,如果WSDL架构返回有效响应,则该服务应该可用。如果它是您的服务,您可以保证这一点,第三方服务可能不会发布服务描述,也可能是非动态WSDL。

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

同样,当你不控制服务实现时它并不完美。

-Jeff