获得Web响应超时

时间:2014-05-04 09:51:19

标签: c# .net

我被要求编写一个小程序,检查我们在线的所有页面都没有错误。

为此,我使用以下代码(其中pathsToCheck为List,每个字符串都是http://www.domain.com/webpage之类的URL)

foreach (string path in pathsToCheck)
{
    HttpWebResponse response = null;
    try
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(path);
        webRequest.AllowAutoRedirect = true;
        response = (HttpWebResponse)webRequest.GetResponse();

        System.Diagnostics.Debug.Assert(response.StatusDescription == "OK", "Look into this, it doesn't like the response code");

        System.Threading.Thread.Sleep(1000);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Failed : " + path);
    }
    finally
    {
        Write(--totalPathsToCheck);
    }
}

我遇到的问题是它总是从列表中的第三项失败(超时)(一切都从第三项失败)。当然,我猜测第三项肯定有问题,但是没有。

由于第一个项目没有超时,我创建了一个新列表,其中包含5个项目,所有相同的URL(我知道其中一个不会超时)。出现同样的问题,在第三次迭代中,它会超时,并继续超时到列表的其余部分。

然后我决定测试一个不同的URL(在不同的域上)并且同样的问题仍然存在。

我在代码中添加了睡眠,并且在给定时间段内有太多请求的情况下增加了它,但没有产生任何差异。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您需要关闭连接。添加

response.Close();

来自http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.close.aspx

  

Close方法关闭响应流并释放与资源的连接以供其他请求重用。   您必须调用Stream.Close或HttpWebResponse.Close方法来关闭流并释放连接以便重用。没有必要同时调用Stream.Close和HttpWebResponse.Close,但这样做不会导致错误。无法关闭流可能会导致应用程序用完连接。