Отправить несколько веб-запросов в Parallel.For - PullRequest
10 голосов
/ 20 сентября 2011

Я хочу отправить несколько 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();
});

Ответы [ 2 ]

12 голосов
/ 02 октября 2011

В дополнение к тому, что сказал Джим Мишель о вызове Close в ответе, вам также необходимо учитывать, что по умолчанию .NET ограничивает приложение только двумя активными HTTP-соединениями на домен одновременно. Чтобы изменить это, вы можете установить System.Net.ServicePointManager.DefaultConnectionLimit программно или установить то же самое через config, используя раздел конфигурации <system.net><connectionManagement>.

10 голосов
/ 28 сентября 2011

Скорее всего, проблема в том, что вам нужно позвонить response.Close() после того, как вы закончите обработку ответа.

...