data body .net httpwebrequest

.net - body - webrequest get data



¿Puedo reutilizar un HttpWebRequest? (3)

Debería estar bien si solo llama a Cerrar en su respuesta. Solo se permiten tantas conexiones "abiertas", por lo que la razón por la que está fallando es porque no puede abrir una nueva conexión.

Una vez que haya terminado con la respuesta, debe cerrarla ... no es necesario reutilizar nada.

Del artículo de MSDN :

Debe llamar al método Stream.Close o HttpWebResponse.Close para cerrar la respuesta y liberar la conexión para su reutilización. No es necesario llamar tanto a Stream.Close como a HttpWebResponse.Close, pero hacerlo no causa un error.

¿Puedo reutilizar un HttpWebRequest?

Parece que la tercera solicitud a un sitio hace que una operación se agote. Parece que cada solicitud crea una nueva conexión, por lo que quiero saber si puedo reutilizar un HttpWebRequest cambiando la URL y volviendo a obtener la solicitud. El código en cuestión está abajo. Este código comprueba si existe un rango de urls.

static void storeList(TextWriter sw, string urlTemplate, int start, int end) { for (int i = start; i < end; i++) { var url = string.Format(urlTemplate, i); var req = (HttpWebRequest)HttpWebRequest.Create(url); { req.Method = "HEAD"; tryHttpWebRequest { var resp = req.GetResponse(); sw.WriteLine(i); } catch (Exception e) { } } } sw.Flush(); }


Envuelva su llamada de respuesta en una declaración usando para asegurarse de que la conexión esté siempre cerrada:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url) // ... using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { // ... }

También envuelva cualquier GetResponseStream () en una declaración de uso.


Solo crea uno nuevo. No me preocuparía ser eficiente en este escenario, ya que creo que el entorno .NET + keepalives HTTP debería manejar las cosas por usted desde esa perspectiva.

Probablemente se encuentre con 1) un problema con el número de conexiones abiertas; elimine la conexión y el error desaparecerá o 2) un problema con los límites de la cantidad de solicitudes por segundo en el servidor (cosas anti-DoS). Primero intentaría con el número 1, ya que es más sencillo, y luego, si aún ve el problema, verifique si el servidor está recibiendo la solicitud pero la está negando.