C#HTTPWebRequest不能用于定期访问URL吗?

时间:2011-01-15 09:48:41

标签: c# http

我正在编写一个使用C#HTTTWebRequest抓取网页的程序。由于我需要监视特定URL的更新,因此我按如下方式编写代码。但是,我注意到我只能得到两次回复。在那之后,它没有得到回应。即使我把时间延长到一分钟,我仍然遇到同样的问题。我不明白为什么。你能帮我个忙吗?非常感谢!

GreatFree

while (true)
{
    WebRequest http = HttpWebRequest.Create("http://www.sina.com.cn");
    HttpWebResponse response = (HttpWebResponse)http.GetResponse();
    Console.WriteLine(response.LastModified);
    Thread.Sleep(5000);
}

2 个答案:

答案 0 :(得分:7)

imaximchuk的回答是正确的,但它没有解释原因。

汇总HTTP连接 - 如果新请求可用,则将重新使用一个连接 - 并在关闭或处置Web响应时返回与池的连接。在您的情况下,您没有关闭或处理响应,因此它不会返回到池中。与任何特定主机的最大连接数是可配置的,但通常不应更改。默认是两个连接 - 这就是为什么你看到两个工作响应然后超时。

我相信有一个终结器某处当它注意到相关对象有资格进行垃圾收集时会释放连接,但那是不确定的。

基本上:始终关闭网络回复,理想情况下使用using声明。

while (true)
{
    WebRequest http = WebRequest.Create("http://www.sina.com.cn");
    using (HttpWebResponse response = (HttpWebResponse)http.GetResponse())
    {
        Console.WriteLine(response.LastModified);
    }
    Thread.Sleep(5000);
}

答案 1 :(得分:5)

您应该在完成回复后致电response.Close()或使用using(HttpWebResponse response ...自动关闭