2009-01-20 10 views
5

Sé que esta es una pregunta vaga, especialmente porque no proporciono ningún código, pero estoy desarrollando una aplicación .Net 2.0, y tenemos una WebRequest que publica datos en una API construida internamente.HttpWebRequests Falló en llamadas posteriores

Lo extraño sucede en nuestra tercera solicitud (y siempre la tercera) que falla en el método GetRequestStream() de la solicitud. La primera y la segunda vez que se llama, todo está bien. En la 3ª vez, se cuelga un poco y eventualmente se agota.

La API está siendo llamada por otras aplicaciones internas, por lo que sabemos que no es un problema del lado del servidor o de la red. Hemos probado varias máquinas, todas tienen el mismo problema. ¿Alguna vez alguien ha tenido este problema o alguien tiene alguna sugerencia sobre cómo depurarlo (ya que el objeto de respuesta no genera nada, o al menos nada útil).

Respuesta

18

Esto generalmente sucede si no está eliminando WebResponse. Hay un límite aplicado a la cantidad de conexiones de un cliente a la misma máquina, y por defecto son dos. Las conexiones pueden reutilizarse (o cerrarse) si cierra WebResponse. El uso de la declaración es su amigo aquí:

WebRequest request = [...]; 
// Do stuff with the request stream here (and dispose it) 
using (WebResponse response = request.GetResponse()) 
{ 
    // Stuff with the response 
} 
+0

Intenté esto, pero el enfoque de uso no funcionó para mí en absoluto. El mismo problema ... – Ted

+0

@Ted: Eso sugiere que es solo una causa diferente ... –

+1

Bueno, en realidad no lo es. Es el mismo problema. Y fue "resuelto" al decirle a la solicitud que use HTTP 1.0, no 1.1. Vea aquí: http://stackoverflow.com/a/8384691/178143 – Ted

1

Sí, su exactamente. La respuesta no fue eliminada adecuadamente. Habíamos estado dejando esto al recolector de basura, que, lo adivinaste, no se recogía a tiempo. Lamentablemente, cerré mi navegador y olvidé leer las respuestas (lol, qué estúpido crees que siento) y el problema está resuelto.

He aprendido 2 cosas esta noche. 1, elimine sus peticiones web de manera adecuada; y 2, ¡PONTA MÁS ATENCIÓN A LAS RESPUESTAS DE APILAMIENTO-APILADO!

+0

Lo principal es * nunca * confiar en el recolector de basura para finalizar las cosas que implementan IDisposable pero no * sabe * son seguro (por ejemplo, MemoryStream). –

Cuestiones relacionadas