c#

c# - ..La conexión subyacente se cerró: se produjo un error inesperado en una recepción



(3)

Configurar el HttpWebRequest.KeepAlive en false no funcionó para mí.

Desde que accedía a una página HTTPS tuve que establecer el Protocolo de seguridad del punto de servicio en Tls12.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Tenga en cuenta que hay otros SecurityProtocolTypes tipos de SecurityProtocolType.Ssl3 SecurityProtocolTypes : SecurityProtocolType.Ssl3 , SecurityProtocolType.Tls , SecurityProtocolType.Tls11

Entonces, si el Tls12 no funciona para usted, pruebe las tres opciones restantes.

También tenga en cuenta que puede configurar múltiples protocolos. Esto es preferible en la mayoría de los casos.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

Tengo el siguiente código:

private Uri currentUri; private void Form1_Load(object sender, EventArgs e) { currentUri = new Uri(@"http://www.stackoverflow.com"); HttpWebRequest myRequest = (HttpWebRequest) HttpWebRequest.Create("http://www.stackoverflow.com"); WebProxy myProxy = new WebProxy("120.198.230.8:81"); myRequest.Proxy = myProxy; HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); webBrowser1.DocumentStream = myResponse.GetResponseStream(); webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating); } void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { if (e.Url.AbsolutePath != "blank") { currentUri = new Uri(currentUri, e.Url.AbsolutePath); HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(currentUri); HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); webBrowser1.DocumentStream = myResponse.GetResponseStream(); e.Cancel = true; } }

después de compilar

error: se produjo una excepción no controlada del tipo ''System.Net.WebException'' en System.dll

Información adicional: la conexión subyacente se cerró: se produjo un error inesperado en una recepción.

en la línea HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

por favor, ayúdame


Ninguna de las soluciones por ahí funcionó para mí. Lo que finalmente descubrí fue la siguiente combinación:

  • Sistema cliente: Windows XP Pro SP3
  • El sistema cliente tiene .NET Framework 2 SP1, 3, 3.5 instalado
  • Software dirigido a .NET 2 utilizando servicios web clásicos (.asmx)
  • Servidor: IIS6
  • Sitio web "Comunicaciones seguras" configurado para:
    • Requerir canal seguro
    • Aceptar certificados de cliente

Aparentemente, fue esta última opción la que causó el problema. Descubrí esto al intentar abrir la URL del servicio web directamente en Internet Explorer. Simplemente se colgó indefinidamente tratando de cargar la página. Deshabilitar "Aceptar certificados de cliente" permitió que la página se cargara normalmente. No estoy seguro de si fue un problema con este sistema específico (¿tal vez un certificado de cliente defectuoso?) Como no estaba usando certificados de cliente, esta opción funcionó para mí.


La conexión subyacente se cerró: se produjo un error inesperado en una recepción.

Este problema se produce cuando el servidor u otro dispositivo de red cierran inesperadamente una conexión existente del Protocolo de Control de Transmisión (TCP). Este problema puede ocurrir cuando un valor de tiempo de espera en el servidor o en el dispositivo de red se establece demasiado bajo. Para resolver este problema, consulte las resoluciones A, D, E, F y O. El problema también puede ocurrir si el servidor restablece la conexión inesperadamente, como si una excepción no controlada bloquea el proceso del servidor. Analice los registros del servidor para ver si este puede ser el problema.

Resolución

Para resolver este problema, asegúrese de que está utilizando la versión más reciente de .NET Framework.

Agregue un método a la clase para anular el método GetWebRequest . Este cambio le permite acceder al objeto HttpWebRequest. Si está utilizando Microsoft Visual C #, el nuevo método debe ser similar al siguiente.

class MyTestService:TestService.TestService { protected override WebRequest GetWebRequest(Uri uri) { HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri); //Setting KeepAlive to false webRequest.KeepAlive = false; return webRequest; } }

Extracto de KB915599: Recibe uno o más mensajes de error cuando intenta realizar una solicitud HTTP en una aplicación que se basa en .NET Framework 1.1 Service Pack 1 .