【问题标题】:how to Identify web service availability?如何识别 Web 服务可用性?
【发布时间】:2016-01-11 18:59:33
【问题描述】:
我有大约 500 个网络服务。我厌倦了使用 Ping,但它似乎并不准确。我已经测试了网络客户端并下载到字符串。使用秒表我计算了下载时间。它也不是那么准确。确定 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;
}
}
【问题讨论】:
标签:
c#
web-services
wcf
web
repository
【解决方案1】:
您可以创建一个返回服务状态的端点。您可以不时调用此特定的 Web 服务来检查可用性。如果服务器没有响应预定的重试次数)你可以认为它关闭。
它是一个用于检查服务器和服务状态的网络服务。
【解决方案2】:
您需要考虑制定健康检查策略。
取决于层,你要检查:
网络可用性?只要 ICMP 数据包在其途中未被任何防火墙拒绝,Ping 就足够了。也许不是一个真正有意义的测试。
套接字/应用服务器可用性?一个简单的重复套接字连接检查(例如,请参阅Java detect lost connection)是最有效的检查方法,如果有一个侦听器在您的应用程序服务器上启动并运行。但在某些情况下,如果您的 Web 服务的 http 服务器已启动并正在运行,但您的 Web 服务存在例如问题(例如数据库问题),则此测试还不够
功能可用性?最可靠但也最复杂的策略。您将需要 a) 在您的 web 服务的肥皂层上实现一个 ping 服务或 b) 调用现有的 web 服务操作来检查它们的可用性。但是,调用写入服务时必须小心。要么以幂等方式设计它们(重试/重复请求不会改变任何内容),要么为写入服务准备一些功能性无害的无效请求,并针对响应在 healthcheck-client 上做出断言。