C# TCP客户端连接到不可用的服务

C# TCP客户端连接到不可用的服务,c#,tcpclient,uptime-monitoring,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); }` 我正在测试的IP地址和端口是一个通过IIS运行的开发人员站点。

到目前为止,我的代码是

`tcpClient = new TcpClient();
tcpClient.Connect(ip.IpAddress, Convert.ToInt32(ip.Port));
if (tcpClient.Connected)
{
  Console.WriteLine("Host is up");
  Console.ReadKey();
}
else
{
  UpdateDowntime(ip);
}`
我正在测试的IP地址和端口是一个通过IIS运行的开发人员站点。我已停止此站点的应用程序池。如果我通过浏览器导航到它,我会

服务不可用

HTTP错误503。服务不可用

但如果我运行它连接并打印的代码,主机就启动了


请告知我在该步骤中遗漏了什么。

如果有人遇到同样的问题,请添加此选项。这是我在使用上面评论中的链接后的解决方案

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分钟运行一次。当服务关闭时,它还会发送电子邮件。告知哪个服务停止,何时以及响应错误是什么

我的最终结果将是,每当高管需要了解多个不同场景的指标时,使用SSR生成一份报告,这些场景包括什么时候发生故障、持续多长时间、是否在黄金时段发生故障等


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

您只是测试机器是否可以接受tcp连接,而不是web服务器是否能够处理请求。如果TCP连接不起作用,那么web服务器无法返回503不可用响应。好的,那么运行时间监视器的这些方面比TcpClient和捕获503错误更有效?我不知道是否更高效,但根据该链接发送HTTP请求将告诉您web服务器是否能够处理请求是的。谢谢您的帮助。