发送多个WebRequest并行

本文关键字:WebRequest 并行 | 更新日期: 2023-09-27 18:09:15

我想发送多个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();
});

发送多个WebRequest并行

最有可能的问题是,你需要调用response.Close()后,你完成处理响应。

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