为什么WebRequest只能工作两次?

时间:2013-05-01 14:38:20

标签: httpwebrequest

我有一个非常简单的HTTP get应用程序,这里有一个更简单的编译版本

using System;
using System.Net;
using System.Threading;

namespace UploadRichardsStatusConsoleApplication
{
    class Program
    {
        static void Main()
        {
            const string requestString = "http://www.google.com/";
            while (true)
            {
                var request = WebRequest.Create(requestString);
                Console.WriteLine("request sent = " + requestString);
                try
                {
                    var response = request.GetResponse();
                    Console.WriteLine("response.ContentLength = " + response.ContentLength);
                }
                catch (WebException)
                {
                    Console.WriteLine("Request timed out");
                }
                Thread.Sleep(5000);
            }
        }
    }
}

真正的控制台应用程序有我自己的Azure URL,但无论请求字符串是什么,即使使用Google,问题也会出现,所以我不认为这是服务器方面的问题。当我运行代码时,前两个循环成功,即报告response.ContentLength。此后他们超时。为什么我只接到两个电话?我正在使用的实际应用程序使用HTTP GET定期报告状态,因此我需要重复执行此操作(超过两次!)

我应该注意到我已经尝试过:

  • 将未使用的查询属性添加到URL,以便每个URL都是
  • 将超时设置为巨大值
  • 绕过缓存

但这些都没有奏效。

1 个答案:

答案 0 :(得分:5)

您没有处理响应,这意味着它仍在占用该主机的连接池。对同一主机的后续请求将等待释放连接,这意味着等待可能永远不会发生的垃圾收集/终结器轮次。

使用using语句,它应该没问题:

using (var response = request.GetResponse())
{
    ...
}