【问题标题】:Send multiple WebRequest in Parallel.For并行发送多个 WebRequest.For
【发布时间】:2011-09-19 21:03:19
【问题描述】:

我想发送多个WebRequest。我使用Parallel.For 循环来执行此操作,但循环运行一次,第二次在获得响应时出错。

错误:

操作已超时

代码:

Parallel.For(0, 10, delegate(int i) {
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
        new Uri("http://www.mysite.com/service"));

    string dataToSend = "Data";
    byte[] buffer = System.Text.Encoding.GetEncoding(1252).
        GetBytes(dataToSend);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = buffer.Length;

    request.Host = "www.mysite.com";

    Stream requestStream = request.GetRequestStream();
    requestStream.Write(buffer, 0, buffer.Length);
    requestStream.Close();

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
});

【问题讨论】:

  • 它给你一个错误信息?真的吗?您有什么特别想问的问题吗?
  • 什么异常,发生在哪里?您确定服务器实际上没有超时吗?

标签: c# httpwebrequest task-parallel-library


【解决方案1】:

问题很可能是您在处理完响应后需要调用response.Close()。

【讨论】:

    【解决方案2】:

    除了 Jim Mischel 所说的在响应上调用 Close 时,您还需要考虑到,默认情况下,.NET 将应用程序限制为每个域一次只能有两个活动的 HTTP 连接。要更改此设置,您可以通过编程方式设置 System.Net.ServicePointManager.DefaultConnectionLimit 或使用 <system.net><connectionManagement> 配置部分通过 config 设置相同的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多