HttpClient POST在IIS上进行请求处理之前的长延迟,多线程

时间:2014-03-31 07:30:18

标签: c# asp.net multithreading iis-7.5 dotnet-httpclient

我有一个简单的控制台应用程序,可以从多个线程发送HTTP POST:

List<Task> tasks = new List<Task>();
for (int i = 0; i < 100; i++)
{
    tasks.Add(Task.Factory.StartNew(() => SendQuery(url1, query1)));
    tasks.Add(Task.Factory.StartNew(() => SendQuery(url2, query2)));
}

Task.WaitAll(tasks.ToArray());

SendQuery(string uri, string requestString)看起来像这样:

Uri url = new Uri(uri);

try
{
   using (HttpClient client = new HttpClient { Timeout = new TimeSpan(0, 0, 10, 0) })
   {
      StringContent content = new StringContent(requestString);
      content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
      HttpResponseMessage response = client.PostAsync(url, content).Result;
      response.EnsureSuccessStatusCode();
   }
}
catch (Exception ex)
{
   Console.WriteLine(ex);
}

程序运行没有任何错误,最后处理所有查询,但在填写tasks列表后,每个线程挂起client.PostAsync(url, content).Result几分钟后 IIS开始处理查询。为什么会出现这种延迟?这段时间发生了什么?我正在使用在Windows Server 2008 R2上运行的IIS 7.5来托管提供url1url2的网络服务。

1 个答案:

答案 0 :(得分:0)

在程序开始时将此值设置为500或1000,并告诉我们效果。 您的请求可能会受到默认值2的限制(取决于.net版本)

ServicePointManager.DefaultConnectionLimit = 500;