【问题标题】:How to check if Web server is up? (C#)如何检查Web服务器是否启动? (C#)
【发布时间】:2010-08-27 09:52:59
【问题描述】:

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

成功的 Ping 仅表明 远程主机可以在 网络;更高层次的存在 服务(例如 Web 服务器) 不保证远程主机。

还有其他更好的方法吗?

【问题讨论】:

    标签: c# .net networking system.net


    【解决方案1】:

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

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

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

    【讨论】:

    • 我通常的做法是创建一个状态页面(仅限于内部可见性),它会转储出详细说明子组件状态的 xml 文档 - 提供单个调用端口和详细的系统信息。
    【解决方案2】:

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

    database: ok
    service x: ok
    

    然后使用 WebClient 检索该信息

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

    【讨论】:

    • 如果您尝试访问的网络服务器上禁用了“Ping”,则效果很好!
    【解决方案3】:

    我通常在我的服务器上公开一个 Ping web 方法,它有时也会对系统进行一些基本的健康检查(如果合适的话)。然后只需对您的 Ping 方法进行网络调用,您就可以知道系统的状态。

    【讨论】:

      【解决方案4】:

      或者你可以做一个很好的 Socket 连接到 IIS 端口(默认 80)。 发送一个类似 "PING\r\n" 的字符串,看看你会得到什么回报。

      您通常会收到“HTTP/1.1 400 Bad Request....”消息作为回报。这样你就知道它已经启动并运行了。

      如果您无法获得连接,则表示网络服务器已关闭或中间有某些东西阻塞(防火墙/路由器设置等)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 2017-03-16
        • 2015-02-18
        相关资源
        最近更新 更多