我正在构建一个监控应用程序来持续监控我系统的各个方面。我希望使用该Ping()
功能来确定服务器是否已启动,但MSDN 文档本身说这不是最好的方法:
一个成功的 Ping 仅表明网络上可以访问远程主机;不能保证远程主机上存在更高级别的服务(例如 Web 服务器)。
还有其他方法可以更好地做到这一点吗?
我正在构建一个监控应用程序来持续监控我系统的各个方面。我希望使用该Ping()
功能来确定服务器是否已启动,但MSDN 文档本身说这不是最好的方法:
一个成功的 Ping 仅表明网络上可以访问远程主机;不能保证远程主机上存在更高级别的服务(例如 Web 服务器)。
还有其他方法可以更好地做到这一点吗?
您需要确定一个您希望测试的页面/网址,可以是已经存在的页面/网址,也可以是您为检查服务器可用性的特定目的而创建的页面/网址。
每 [一段时间] 您可以向此 url 发出一次请求并检查响应以确定它是否包含预期值,例如您请求的页面内容mysite.com/default.aspx
。最好的办法是将一个 url/page/web 服务调用专用于“ping”,因为它可以确保如果您正在检查的任意页面的内容在您不知情的情况下发生更改,它不会被破坏。
我建议不要做的一件事是让这种 ping 方法测试所有内容,包括您的数据库连接、第 3 方 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 方法进行网络调用,您就可以知道系统的状态。
或者,您可以与 IIS 端口(默认 80)建立良好的 Socket 连接。发送一个像“PING\r\n”这样的字符串,看看你会得到什么回报。
你通常会得到一个“HTTP/1.1 400 Bad Request....”作为回报。这样你就知道它的启动和运行。
如果您无法获得连接,则表示 Web 服务器已关闭或中间有某些东西阻塞(防火墙/路由器设置等)。