【问题标题】:Is My site down, not working or has an error?我的网站是否已关闭、无法正常工作或有错误?
【发布时间】:2009-03-03 19:48:13
【问题描述】:

我想创建一个小型 Windows 应用程序,它会在每个时间段自动转到我的站点并检查它是否运行正常,如果发现它已关闭、不工作或出现错误“示例:404、网络错误、连接到 db失败”它会在我的屏幕上显示一条消息。

我如何知道使用任何 .NET 语言以编程方式存在错误?

【问题讨论】:

  • 当然,任何程序都会受制于您所在的网络。

标签: c# .net asp.net vb.net web


【解决方案1】:

使用WebClient 非常容易。它看起来像这样:

    WebClient client = new WebClient();
    try
    {
        string response =
            client.DownloadString("http://www.example.com/tester.cgi");

        // We at least got the file back from the server

        // You could optionally look at the contents of the file
        // for additional error indicators      
        if (response.Contains("ERROR: Something"))
        {
            // Handle
        }
    }
    catch (WebException ex)
    {
        // We couldn't get the file.
        // ... handle, depending on the ex
        //
        // For example, by looking at ex.Status:
        switch (ex.Status)
        {
            case WebExceptionStatus.NameResolutionFailure:
                // ...
            break;
            // ...
        }
    }

您可以将其连接到 TimerTick 事件或定期进行检查的东西。

【讨论】:

  • 你也应该使用 DownLoadStringAsync(),这样你也可以设置一个合理的超时时间。
【解决方案2】:

何必呢?你可以从像RedAlert这样的提供商那里以便宜的价格获得更好的解决方案

这样做的好处是:

1) 它从防火墙外部测试您的站点,因此可以检测到更广泛的问题。

2) 它是一个公正的第 3 方,因此如果您需要 SLA,您可以证明正常运行时间。

3) 只需支付少量费用,您就可以尝试诊断问题。

4) 出现问题时,它可以寻呼或发送电子邮件给您。

5) 您无需调试新服务器。

天啊,我听起来像是在为这些家伙打广告,但我保证我不会为他们工作或获得回扣。我刚刚对我们服务器的服务感到满意。

顺便说一句:我检查了定价,每个站点/月约为 20 美元。因此,您可能会在比自己构建它所需的时间更短的时间内支付一年的服务费用。

【讨论】:

  • 何必呢?您可以从 InternetSeer 等提供商处免费获得相同的解决方案。哎呀,即使是谷歌网站管理员工具也提供了类似的(虽然不是任何地方都那么复杂)的服务。当其他人为相同的服务收取 0 美元时,我看不出每个网站每月 20 美元的合理性。
  • 我把“我想创建一个小窗口应用程序...”这个问题理解为他想学习如何做某事,而不是找到可以执行该服务的收费/免费服务。 ..
  • @Dscoduc,是的,你是对的,我想要的是学习如何做我自己,但我感谢任何他知道的任何帮助的人。我从这里的答案中学到了新的东西和服务,这很棒:)
  • 我不知道免费选项。很有用。自 1999 年以来我一直在使用 redalert,我想我从来没有注意到更便宜/免费的选项何时出现。
【解决方案3】:

想要执行与我第一次研究第三方解决方案时相同的功能。一项免费且相当准确的特定服务是MonitorUs

但是,如果您想构建自己的,那么我会提出一项建议。考虑使用 Head 请求而不是 get 请求:

HEAD 方法与 GET 相同 除了服务器不能返回 响应中的消息正文。这 HTTP 中包含的元信息 响应 HEAD 请求的标头 应该与信息相同 为响应 GET 请求而发送。 该方法可用于获取 关于实体的元信息 由请求暗示而没有 转移实体主体本身。 这种方法常用于测试 有效性的超文本链接, 可访问性和最近 修改。 w3.org

这是a link to Peter Bromberg's 文章,它解释了如何在 C# 中执行 Head 请求。

【讨论】:

    【解决方案4】:

    使用 System.Net.WebClient 对象。它比 HttpWebRequest 更容易使用。它有一个“DownloadString”方法,可以将 URL 的内容下载到字符串中。如果服务器返回 500,该方法也可能抛出 WebException 错误。对于其他错误,您可以解析字符串并查找关键字。

    【讨论】:

      【解决方案5】:

      使用 HttpWebRequest,并将其包装在 WebException 的 try catch 中。异常对象中的错误代码将为您提供代码。 404等。如果是500,你可以打印消息。

      【讨论】:

        【解决方案6】:

        如果你这样做,创建一个特殊的页面来运行任何特殊的子系统,比如数据库、文件 IO 等,并以纯文本而不是 html 的形式提供结果。这将使您能够更轻松地解析返回的数据,并且还可以捕获可能不会给您 404 或 500 HTTP 错误的 DB 或 IO 问题。

        【讨论】:

          【解决方案7】:

          试试 Adventnet 的应用程序管理器 (http://www.manageengine.com/products/applications_manager/),它可免费用于 5 台显示器,并提供出色的监控功能

          您可以配置在发送电子邮件等失败时可以执行的操作。

          【讨论】:

            【解决方案8】:

            如果您希望在网站出现故障时接收电子邮件/短信,请尝试Are My Sites Up 基于网络的解决方案。

            【讨论】:

              猜你喜欢
              • 2012-02-28
              • 2017-12-03
              • 1970-01-01
              • 2012-11-03
              • 1970-01-01
              • 2017-06-24
              • 1970-01-01
              • 2018-02-17
              • 1970-01-01
              相关资源
              最近更新 更多