2009-09-22 34 views
6

Estoy escribiendo una aplicación .NET que se supone que debe publicar datos en otra aplicación .NET. utilizo el siguiente código para solicitar la página de inicio de sesiónSystem.Net.WebException: La conexión subyacente se cerró: La conexión se cerró inesperadamente

WebProxy proxy = new WebProxy("http://proxy:80/", true); 
HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest; 
//proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
// webRequest.Proxy = proxy; 
webRequest.Proxy = WebRequest.DefaultWebProxy; 

StreamReader responseReader = new StreamReader 
            (webRequest.GetResponse().GetResponseStream()); 
string responseData = responseReader.ReadToEnd(); 

pero fracasa en esta línea

StreamReader responseReader = new StreamReader 
            (webRequest.GetResponse().GetResponseStream()); 

con el mensaje de error:

System.Net.WebException: The underlying connection was closed: The connection was 
         closed unexpectedly. 
+2

para comenzar a rastrear el problema, le sugiero que ajuste la llamada en el código de captura de excepción e imprima el seguimiento completo de la pila. –

+1

Esta excepción es particularmente difícil de rastrear. Proporcione toda la información que pueda si desea respuestas razonables – Rik

+0

El seguimiento de la pila de la excepción no proporciona nada más que: en System.Net.HttpWebRequest.GetResponse() – Kwah009

Respuesta

2

me encontré con la misma excepción de un tiempo Hace y recuerdo que esto sucede en algunos casos debido a un error en .NET. Puede solucionar esto estableciendo Timeout y ReadWriteTimeout de la solicitud en valores más altos o establezca KeepAlive en falso.

Esto solo sería una solución alternativa, por lo tanto, le sugiero que intente encontrar la causa raíz antes de asumir algo.

Voy a tratar de llegar a algunas referencias web, en la media hora, mira Big files uploading (WebException: The connection was closed unexpectedly)

+0

parece que estamos en algo aquí. Ahora recibo el mensaje de error El servidor remoto devolvió un error: (411) Longitud requerida. Aunque cuando configuro el archivo longfeild la aplicación se cuelga ... – Kwah009

6

Si está utilizando .NET 2.0 o superior se puede habilitar el seguimiento de la red y ver lo que está sucediendo realmente sobre el cable. De esa manera puede obtener más información sobre esta excepción en particular.

Ver siguiente enlace para más detalles, http://msdn.microsoft.com/en-us/library/hyb3xww8%28VS.80%29.aspx

0

Parece que a los posibles problemas:

  1. Nunca se asigna el proxy se crea a su HttpWebRequest

    WebProxy **proxy** = new WebProxy("http://proxy:80/", true); 
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest; 
    //proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
    // webRequest.Proxy = proxy; 
    webRequest.Proxy = **WebRequest.DefaultWebProxy**; 
    

    Debe asignar es así:

    WebProxy proxy = new WebProxy("http://proxy:80/", true); 
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest; 
    webRequest.Proxy = proxy; 
    

    (observe la diferencia en la última línea).

  2. Utiliza el puerto 80 en su proxy. Claro, eso es correcto? Muchos proxies utilizan el puerto 8080.

-1
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials; 

esta es la solución

3

En mi caso, esto resuelve el problema:

   System.Net.ServicePointManager.Expect100Continue = false; 

y ninguna de las anteriores.

+0

Tuve un problema al intentar comunicarme con un servicio web de dispositivo incorporado y esta fue la solución. – jamesallman

0

En mi caso, tuve que configurar la configuración del proxy para permitir no solo HTTP sino también HTTPS en el mismo puerto, porque una de las solicitudes fue enviada por protocolo HTTPS.

0

Era un caso diferente para mí. Las consultas tardaban demasiado, por lo que la conexión se agotaba. Hay cinco tiempos de espera en WCF 1. Tiempo de espera de envío - Valor predeterminado 1 min 2. Tiempo de espera de recepción - Valor predeterminado 1 min 3. Tiempo de espera abierto - Valor predeterminado 1 min 4.Tiempo de espera de cierre - Predeterminado 1 minuto 5. Tiempo de espera de inactividad - Predeterminado 10 minutos

Establecí el tiempo de envío y recepción correctamente pero el problema fue el tiempo de inactividad debido a que la consulta era demasiado larga en el servidor, el servicio WCF cerró el canal por lo que era no poder transmitir la respuesta. Espero que esto ayude si está usando WCF para obtener respuesta del servidor, lo cual lleva mucho tiempo en ejecutarse.

0

Tuve este problema una vez. Mi protección de virus fue la culpable.

Cuestiones relacionadas