【问题标题】:Simple way to ping webserver to see if operational/alive?简单的方法来 ping 网络服务器以查看是否运行/活着?
【发布时间】:2011-09-04 02:15:27
【问题描述】:

我有一个分布式网站(.NET、IIS),在世界各地拥有动态数量的服务器。

我想构建一个 [简单] 实用程序,它将位于我们的家庭位置,并且每隔一段时间“ping”网络服务器以查看它们是否可以运行。然后,我会将每台服务器的此结果记录到数据库中,以显示当前状态和任何检测到的停机时间的历史记录。

最好的方法是什么?从 .NET 通过 HTTP 连接?我希望这不是太多代码(理想情况下),并作为服务运行。

任何链接或示例代码将不胜感激。

这是标准做法吗?还是分布式应用程序通常会做一些不同的事情? (就像打电话回家而不是被 ping)。

【问题讨论】:

    标签: .net iis health-monitoring


    【解决方案1】:

    这是一个与您很接近的 SO 问题:

    Best way to test if a website is alive from a C# applicaiton

    基本上,您可以使用以下代码检查网站状态:

    WebRequest request = WebRequest.Create("http://localhost/myContentSite/test.aspx");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    if (response == null || response.StatusCode != HttpStatusCode.OK)
    {
       Console.WriteLine("You have a problem");
    }
    

    至于最好的方法,如果可能的话,我建议您使用电话回家模式。这样你就不必关心谁被添加了。它们只会在他们第一次签入时自动显示。但是,如果您无法完全控制所有网站的代码(或者如果您已经启动了它们),那么使用集中式可能会更好用于测试站点可用性的监控解决方案。这将减少您需要对系统进行的更改量。最后,如果您想真正检查以确保站点处于活动状态,请远程检查,而不是发送“我还活着”的消息。这将确保防火墙等也正常工作,因为站点可能能够发送出去,但可能无法从外部网络访问。

    【讨论】:

    • 很棒的答案。非常非常简单。它会教我有关 HTTPWebResponse 的知识。
    【解决方案2】:

    您可以为此使用 WebRequest 类。

    var request = WebRequest.Create("http://google.com");
    using (var response = request.GetResponse())
    using (var streamReader = new StreamReader(response.GetResponseStream()))
    {
        var responseText = streamReader.ReadToEnd();
    
        // validate that responseText has content that you would expect
    }
    

    我建议检查页面内容以确保您的网站部署正确。如果网站重新部署不正确,网站可以返回 StatusCode HttpStatusCode.OK,同时显示 IIS 欢迎页面而不是您希望看到的页面。

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多