2011-09-19 33 views
10

Tôi muốn gửi nhiều WebRequest. Tôi sử dụng một vòng lặp Parallel.For để làm điều đó nhưng vòng lặp chạy một lần và lần thứ hai nó đưa ra lỗi trong khi nhận được phản hồi.Gửi nhiều WebRequest theo Parallel.For

Lỗi:

The operation has timed out

Code:

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

Nó cung cấp cho bạn thông báo lỗi? Có thật không? Và có một số câu hỏi cụ thể mà bạn muốn hỏi không? –

+0

Và lỗi là ...? – Icarus

+0

Ngoại lệ là gì, nó xảy ra ở đâu? Bạn có chắc máy chủ không thực sự hết thời gian không? –

Trả lời

10

Nhiều khả năng vấn đề là bạn cần phải gọi response.Close() sau khi bạn đã hoàn tất xử lý các phản ứng.

11

Ngoài những gì Jim Mischel nói về việc gọi Đóng trên phản hồi, bạn cũng cần phải tính đến yếu tố đó, theo mặc định, .NET giới hạn ứng dụng chỉ với hai kết nối HTTP đang hoạt động trên mỗi miền cùng một lúc. Để thay đổi điều này, bạn có thể đặt System.Net.ServicePointManager.DefaultConnectionLimit theo cách lập trình hoặc đặt cùng một thứ qua cấu hình bằng cách sử dụng phần cấu hình <system.net><connectionManagement>.

Các vấn đề liên quan