2010-08-27 305 views
4

我正在构建一个监视应用程序来持续监视我系统的各个方面。我希望能使用Ping()函数来确定服务器是否向上,但MSDN documentation自己说,这是不是最好的办法:如何检查Web服务器是否启动? (C#)

一个成功的平表示只能在 来达到这个 远程主机网络;无法保证 远程主机上存在更高级别的服务(例如Web服务器) 。

是否有其他方法可以做到这更好的?

回答

5

你需要解决一个页面/你要测试的网址,或者一个已经存在或您检查服务器可用性的特定目的创建一个上。

每隔[时段]你可以对这个URL的请求,并检查以确定其是否含有,如果你要求mysite.com/default.aspx的预期值(一个或多个),比如网页的内容的响应。最好的做法是将一个url/page/web服务调用专用于“ping”,因为它可以确保在您没有意识到的情况下更改您检查的任意页面的内容时,它不会被破坏。

有一件事我建议这样做是有这个一平方法测试一切,包括你的数据库连接,第三方网络服务的可用性,磁盘空间,等...如果你想做到这一点,有多种方法可供您调用,以便您一眼就能看出导致问题的原因。

+0

我通常的做法是创建一个状态页(仅限于内部可视性)的转储出一个XML文档,详细的子组件的状态 - 提供呼叫和详细的系统信息的提供单端口。 – annakata 2010-08-27 10:21:40

+0

不错的主意。谢谢! – 2010-08-28 10:36:01

2

我通常在我的服务器,有时也做了系统的一些基本的健康检查(如果适用)上提供一个平安Web方法。然后它只是一个网络调用Ping方法的问题,并且您知道系统的状态。

3

只需创建为您的网站的处理程序(或页面),它返回有关系统在XML,JSON或例如任何其它格式的一些信息

database: ok 
service x: ok 

然后使用Web客户端来检索信息

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

如果'Ping'在您尝试访问的Web服务器上被禁用,就能正常工作! – 2012-08-02 09:33:53

1

或者你也可以做一个很好的Socket连接到IIS端口(默认为80)。 发送一个字符串,如“PING \ r \ n”,看看你得到的回报。

您通常会得到一个“HTTP/1.1 400错误请求....”msg作为回报。这样你就知道它正在运行。

如果你不能得到一个连接的Web服务器关闭或物体挡住其间(防火墙/路由器设置等)。