【问题标题】:Status of Internal websites by using PING使用 PING 的内部网站状态
【发布时间】:2013-05-20 13:01:12
【问题描述】:

下午,

就以下内容的最佳使用方法提出了一些建议。

我是 .net 的新手,并且正在开发一个 Asp.net 网页,我只是通过 ping 命令列出了一些内部网站并概述了它们的状态(在线/离线)。这是当前的;通过单击按钮激活。

我需要设置这个开发网页,以便它在早上 7 点的特定时间自动运行以供争论,然后通过电子邮件通知用户组这些项目的状态。

我之前使用过 Microsoft Visual Studio (VB) 2010,可以创建简单的 Web 作品,将数据连接/提取/更新 SQL 2008 数据。我也有一些在 SQL 中创建计划作业的经验,但经验不多。

我想我可能会在 SQL 2008 中创建一个计划作业,找到一种将数据填充到数据库中的方法,在我的网站中使用这些数据并将其显示为 gridview 或其他东西。并让 SQL 作业或网站通过电子邮件向一组用户发送这些内部网站的状态。

有谁知道我是否可以在.net 中完成上述操作?我可以编写某种脚本或安排网页在指定时间运行吗?

我不能 100% 确定解决这项工作的最佳方法,而且我的经验有限。任何人都可以就如何完成上述建议提出任何最佳方法想法。

问候 赌注。

【问题讨论】:

  • 您想知道服务器是否在线,或者网站是否可用?它们不是一回事,ping 只会告诉你服务器,而不是网站。
  • 您好 Fredrik,非常感谢您的帮助。当前的 btnPing_click 我刚刚在我们的两个站点上进行了测试,这些站点位于我们的生产框上,它只是使用该框的 IP 地址来检查生产是否启动或关闭。这是一个正确方向的开始,但我真的应该看看找到一种方法来 ping 各个网站。有什么建议吗?
  • 您的目标并不完全清楚,但如果您的目标只是查看服务器或应用程序是否正在运行,那么您可能希望查看现有的系统管理/监控应用程序,而不是编写您的从头开始拥有。例如,Nagios 是一个非常常见的。

标签: asp.net vb.net visual-studio-2010 sql-server-2008


【解决方案1】:

虽然实现起来相当简单,但我认为ping 命令在您要实现的目标的上下文中没有用。

正如 Fredrik 指出的,ping 仅表明服务器可用。它没有说明单个网站是否在该服务器上正常运行。

如果我这样做,我会创建一个经常运行的服务。该服务将向网站发出获取请求,对内容进行一些解析以确保返回的内容是预期的,并更新数据库中的记录,说明连接时间和状态(上/下)。

例如:

public String CheckSite(String postLocation) {
    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(postLocation);
    // Setting the useragent seems resolves certain issues that *may* crop up depending on the server
    httpRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
    httpRequest.KeepAlive = false;
    httpRequest.Method = "GET";

    using ( HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse() ) {
        using ( StreamReader reader = new StreamReader(httpResponse.GetResponseStream()) ) {
            result = reader.ReadToEnd();
        } // using reader
    } // using httpResponse

    return result;
}

这个简单的调用将从服务器加载一个页面。从那里你可以解析看看你是否有像“错误”这样的词或者你有什么。如果它看起来不错,然后您报告该站点已启动。

我知道上面是 C#,但如果需要,您应该能够轻松地将其转换为 VB。您还应该尝试 .. 接听电话。如果它出错,那么您知道服务器完全脱机。如果页面返回,但包含“错误”或其他内容,那么您知道服务器已启动但应用程序已关闭。

【讨论】:

    【解决方案2】:

    个人。 . .我认为最优雅的解决方案是:(未经测试)

    public String CheckSite(String postLocation) {
        HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(postLocation);
        // Setting the useragent seems resolves certain issues that *may* crop up depending on the server
        httpRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
        httpRequest.KeepAlive = false;
        httpRequest.Method = "GET";
    
        using ( HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse() ) {
           if(httpResponse.StatusCode != {check for valid status codes here})
    

    { //根据无效响应做一些事情。 } } // 使用 httpResponse

        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多