如何识别Web服务可用性?

时间:2016-01-11 18:59:34

标签: c# web-services wcf web repository

我有大约500个网络服务。我厌倦了使用Ping,但它似乎不准确。我测试了Web客户端并下载到字符串。使用秒表我计算了下载时间。它也不那么准确。确定Web服务可用性的最佳方法是什么?

Stopwatch sw = new Stopwatch();
sw.Start();
pingable = a.IsAddressAvailable(nameOrAddress);
sw.Stop();

public bool IsAddressAvailable(string address)
{
    try
    {
        System.Net.WebClient client = new WebClient();
        client.DownloadData(address);
        return true;
    }
    catch
    {
        return false;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以创建一个返回服务状态的端点。您可以不时地调用此特定Web服务来检查可用性。如果服务器没有回答预定的重试次数,你可以认为它是Down。

它是一个检查服务器和服务状态的Web服务。

答案 1 :(得分:0)

您需要考虑设置健康检查策略。

取决于图层,您要检查:

网络可用性? Ping应该足够了,只要ICMP数据包在任何防火墙的路上都不会被拒绝。也许不是一个真正有意义的测试。

套接字/应用服务器可用性?如果在应用程序服务器上启动并运行了一个侦听器,那么一个简单的重复套接字连接检查(例如,参见Java detect lost connection)是最有效的检查方法。但在某些情况下,如果您的Web服务的http服务器启动并运行,此测试是不够的,但您的Web服务有例如问题(例如数据库问题)

功能性可用性?最可靠但也是最复杂的策略。您需要a)在webservice的soap层上实现ping服务,或者b)调用现有的webservice操作来检查它们的可用性。但是,在调用编写服务时必须小心。您可以以幂等方式设计它们(重试/重复请求不会改变任何内容),或者为您的写入服务准备一些功能无害的无效请求,并在您的healtcheck客户端上针对响应进行断言。