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

bin*_* li 2 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);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

imaximchuk的答案是正确的,但它没有解释原因.

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

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

基本上:始终关闭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);
}
Run Code Online (Sandbox Code Playgroud)


ima*_*huk 5

您应该response.Close()在完成使用respose时使用using(HttpWebResponse response ...,或者使用它来自动关闭它