【发布时间】:2010-08-27 09:52:59
【问题描述】:
我正在构建一个监控应用程序来持续监控我系统的各个方面。我希望使用Ping() 函数来确定服务器是否已启动,但MSDN documentation 本身表示这不是最好的方法:
成功的 Ping 仅表明 远程主机可以在 网络;更高层次的存在 服务(例如 Web 服务器) 不保证远程主机。
还有其他更好的方法吗?
【问题讨论】:
标签: c# .net networking system.net
我正在构建一个监控应用程序来持续监控我系统的各个方面。我希望使用Ping() 函数来确定服务器是否已启动,但MSDN documentation 本身表示这不是最好的方法:
成功的 Ping 仅表明 远程主机可以在 网络;更高层次的存在 服务(例如 Web 服务器) 不保证远程主机。
还有其他更好的方法吗?
【问题讨论】:
标签: c# .net networking system.net
您需要确定一个您希望测试的页面/网址,可以是已经存在的页面/网址,也可以是您为检查服务器可用性的特定目的而创建的页面/网址。
您可以每隔 [一段时间] 向该 URL 发出一次请求并检查响应以确定它是否包含预期值,例如如果您请求 mysite.com/default.aspx 时的页面内容。最好的办法是将一个 url/page/web 服务调用专用于“ping”,因为它可以确保如果您正在检查的任意页面的内容在您不知情的情况下发生更改,它不会被破坏。
我推荐反对做的一件事是使用这种 ping 方法测试一切,包括您的数据库连接、第三方 Web 服务可用性、磁盘空间等。 .. 如果你想这样做,可以调用多个方法,这样你就可以一目了然地看到导致问题的确切原因。
【讨论】:
只需为您的网站创建一个处理程序(或页面),它会以 xml、json 或任何其他格式(例如)返回有关您的系统的一些信息。
database: ok
service x: ok
然后使用 WebClient 检索该信息
var client = new WebClient();
string response = client.DownloadString("http://mydomain.com/state.ashx");
// parse information
【讨论】:
我通常在我的服务器上公开一个 Ping web 方法,它有时也会对系统进行一些基本的健康检查(如果合适的话)。然后只需对您的 Ping 方法进行网络调用,您就可以知道系统的状态。
【讨论】:
或者你可以做一个很好的 Socket 连接到 IIS 端口(默认 80)。 发送一个类似 "PING\r\n" 的字符串,看看你会得到什么回报。
您通常会收到“HTTP/1.1 400 Bad Request....”消息作为回报。这样你就知道它已经启动并运行了。
如果您无法获得连接,则表示网络服务器已关闭或中间有某些东西阻塞(防火墙/路由器设置等)。
【讨论】: