TcpClient连接到不可用的服务

时间:2014-10-30 14:12:57

标签: c# tcpclient uptime-monitoring

到目前为止,我的代码是

`tcpClient = new TcpClient();
tcpClient.Connect(ip.IpAddress, Convert.ToInt32(ip.Port));
if (tcpClient.Connected)
{
  Console.WriteLine("Host is up");
  Console.ReadKey();
}
else
{
  UpdateDowntime(ip);
}`

我正在测试的ipAddress和端口是一个通过IIS运行的DEV站点。我已停止此网站的AppPool。如果我通过浏览器导航到此处

服务不可用

HTTP错误503.该服务不可用。

但如果我运行它连接的代码并打印“Host is up”

请告知我在步骤中缺少的内容。

1 个答案:

答案 0 :(得分:0)

添加此项以防任何人遇到同样的问题。在我上面的评论中使用链接后,这是我的解决方案。

foreach (var ip in ipAddressList)
{
    HttpWebResponse myHttpWebResponse = null;
    try
    {
        var myUri = new Uri(ip.Url);
        // Create a 'HttpWebRequest' object for the specified url. 
        var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
        // Set the user agent as if we were a web browser
        myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4";
        myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
        // Release resources of response object.
        myHttpWebResponse.Close();
    }
    catch (WebException ex)
    {
        // If we get here, port is not open, or host is not reachable
        UpdateDowntime(ip, ex.Message);
    }
    finally
    {
        if (myHttpWebResponse != null)
        {
            myHttpWebResponse.Close();
        }
    }
}

在UpdateDowntime()内部,当URL无法访问时,我将服务结果加载到数据库,因此可以报告此情况并创建任务计划程序任务以每5分钟运行一次。它还会在服务中断时发送电子邮件。告知哪些服务已关闭,何时以及响应错误是什么。

我的最终结果将是每当高管需要知道关于什么时候发生故障的多种不同情况,多长时间,如果他们在黄金时段发生故障等等时,都会使用SSRS进行报告。

希望如果他们发现同样的问题,这可以帮助其他人。