如何检查Web服务器是否已启动? (C#)

时间:2010-08-27 09:52:59

标签: c# .net networking system.net

我正在构建一个监控应用程序来持续监控系统的所有方面。我希望使用Ping()函数来确定服务器是否已启动,但MSDN documentation本身表示它不是最佳方式:

  

成功的Ping仅表示   远程主机可以到达   网络;更高层次的存在   服务(如Web服务器)上   远程主机无法保证。

还有其他方法可以做得更好吗?

4 个答案:

答案 0 :(得分:5)

您需要确定要测试的一个页面/网址,可以是已经存在的网页,也可以是您为检查服务器可用性而创建的网页。

每隔[段时间],您可以向此网址发出请求,并检查响应以确定其是否包含预期值,例如您请求mysite.com/default.aspx时的网页内容。最好的办法是将一个URL /页面/ Web服务调用专用于“ping”,因为它确保如果您检查的任意页面的内容在您不知情的情况下被更改,它就不会被破坏。

我建议反对做的一件事是使用这一个ping方法测试所有,包括您的数据库连接,第三方Web服务可用性,磁盘空间等。 ..如果你想这样做,你可以调用多种方法,这样你就可以一目了然地看到导致问题的原因。

答案 1 :(得分:3)

只需为您的站点创建一个处理程序(或页面),它以xml,json或任何其他格式返回有关系统的一些信息,例如。

database: ok
service x: ok

然后使用WebClient检索该信息

var client = new WebClient();
string response = client.DownloadString("http://mydomain.com/state.ashx");
// parse information

答案 2 :(得分:2)

我经常在我的服务器上公开一个Ping Web方法,有时也会对系统进行一些基本的健康检查(如果适用)。然后,只需要对您的Ping方法进行Web调用,就可以了解系统的状态。

答案 3 :(得分:1)

或者您可以与IIS端口建立良好的Socket连接(默认为80)。 发送一个像“PING \ r \ n”这样的字符串,看看你收到了什么。

您通常会收到“HTTP / 1.1 400错误请求....”消息。这样你就知道它正在运行。

如果您无法建立连接,则Web服务器会关闭或者其间存在阻塞(防火墙/路由器设置等)。