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

C#HTTPWebRequest不能用于定期访问URL?,c#,http,C#,Http,我正在编写一个使用C#HTTTWebRequest抓取网页的程序。因为我需要监视特定URL的更新,所以我编写如下代码。然而,我注意到我只能得到两次回复。在那之后,它没有得到任何回应。即使我把时间延长到一分钟,我还是遇到了同样的问题。我不明白为什么。你能帮我一下吗?非常感谢 伟大的自由 while (true) { WebRequest http = HttpWebRequest.Create("http://www.sina.com.cn"); HttpWebResponse r

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

伟大的自由

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

您应该在完成respose的操作后调用
response.Close()
,或者使用
使用(HttpWebResponse response…
自动关闭它

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

HTTP连接是池连接-一个连接将被重新用于一个新请求(如果可用),当您关闭或处理web响应时,会将连接返回到池中。在您的情况下,您没有关闭或处理响应,因此不会将其返回到池中。到任何特定对象的连接数都是最大的r主机,可配置,但通常不应更改。默认设置为两个连接-这就是为什么您看到两个工作响应,然后超时

我相信某个地方有一个终结器,当它注意到相关对象符合垃圾收集的条件时,它会释放连接,但这是不确定的

基本上:始终关闭web响应,理想情况是使用
语句

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

“我没有得到响应”是什么意思?是否存在异常、空响应流、HTTP错误?线程在HttpWebResponse=(HttpWebResponse)HTTP.GetResponse()行被阻塞,直到出现超时异常。非常感谢您的回答!非常感谢您的回答!