2011-09-19 14 views
10

Deseo enviar múltiples WebRequest. Usé un bucle Parallel.For para hacer eso, pero el bucle se ejecuta una vez y la segunda vez produce un error al obtener la respuesta.Enviar múltiples WebRequest en Paralelo.Para

error:

The operation has timed out

Código:

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

¿Le da un mensaje de error? De Verdad? ¿Y hay alguna pregunta en particular que le gustaría preguntar? –

+0

¿Y el error es ...? – Icarus

+0

¿Cuál es la excepción, dónde ocurre? ¿Estás seguro de que el servidor no se está agotando? –

Respuesta

10

más probable es que el problema es que es necesario llamar a response.Close() después de que haya terminado de procesar la respuesta.

11

Además de lo que dijo Jim Mischel acerca de llamar a Cerrar en la respuesta, también debe tener en cuenta que, de manera predeterminada, .NET limita una aplicación a solo dos conexiones HTTP activas por dominio a la vez. Para cambiar esto, puede establecer System.Net.ServicePointManager.DefaultConnectionLimit programáticamente o establecer lo mismo a través de config usando la sección de configuración <system.net><connectionManagement>.

Cuestiones relacionadas