tipo que puede objeto net framework filewebrequest convertir .net

.net - puede - Lo que podría causar ThreadAbortException al usar HttpWebRequest.GetResponse()



webrequest post vb net (4)

Estoy viviendo en pesadillas debido a esta situación, tengo un HttpWebRequest.GetResponse que me sigue dando una ThreadAbortException, que hace que toda la aplicación se apague.

¿Cómo puedo evitar eso, o al menos manejarlo, sería útil utilizar Thread.ResetAbort () en tal caso?

Para explicar más aquí hay una muestra de código aproximado:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://someurl.com/"); HttpWebResponse resp = req.GetResponse();

ahora la última línea anterior arroja la ThreadAbortException, puede ser porque la solicitud excedió el tiempo de espera, lo que está bien, pero no quiero obtener una ThreadAbortException dentro de mi aplicación ASP.NET 2.0 porque la mata. ThreadAborException no se puede atrapar con try / catch, la única forma de manejarlo es usar Thread.ResetAbort (), que también tiene sus propios efectos nocivos, mantendrá el hilo de vida y solo Dios sabe por cuánto tiempo.


He visto los problemas enumerados por Andrew y "ForCripesSake".

Otra posibilidad para su ThreadAbortException es cualquier código que se ejecute fuera del ciclo de vida de la solicitud de página en el lado del servidor, como HttpModules y HttpHandlers. Cualquier excepción arrojada dentro de un módulo o manejador no va al mecanismo de excepciones no controladas predeterminado en ASP.Net, y puede hacer que el hilo muera.

Hay un par de excepciones que no se pueden manejar fácilmente en ASP.net o CLR en general, de acuerdo con este artículo:

Mejores prácticas de confiabilidad

No estoy seguro de si se aplica al código del cliente que ha enumerado en su pregunta, pero podría estar relacionado.

¡Espero que ayude!


Nuestra aplicación lanzó ThreadAbortException todo el tiempo b / c de llamadas Response.Redirect ("url"). La aplicación nunca se cerró, probablemente b / c la excepción fue atrapada en algún punto y se mantuvo activa.

Incidentalmente, Response.Redirect ("url", false) evitará que la respuesta termine con la excepción. La publicación de Andrew se vincula a soluciones similares para diferentes usos de la clase de respuesta.


Tuve este problema al usar Response. Echa un vistazo a este artículo para algunas soluciones. http://support.microsoft.com/kb/312629

También eche un vistazo a esta documentación de MSDN en la sección de WebException y Comentarios. http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse.aspx

Se puede atrapar esta excepción ... Si tiene problemas para detectar la correcta, intente capturar una excepción general (excepción de sistema) y a partir de allí la ruta de la pila le indicará el tipo específico (HttpException, WebException, etc.) a en realidad atrapar.


Por lo que dices, parece que estás realizando una WebRequest saliente a un recurso externo desde el procesamiento de una solicitud entrante a una aplicación ASP.NET. Hay (al menos) dos tiempos de espera que son relevantes aquí:

  • WebRequest.Timeout (predeterminado 100000ms = 100s) especifica el tiempo de espera para la ejecución de la WebRequest saliente. Si este tiempo de espera expira, debe obtener una WebException, por lo que este no es su problema.

  • El HttpRuntime que está procesando su solicitud entrante tiene un tiempo de espera de ejecución: el valor predeterminado según MSDN es 110s para .NET 2.0 o posterior, 90s para .NET 1.x. Cuando expire este tiempo de espera, obtendrá una ThreadAbortException. Parece que esto es lo que está sucediendo.

En .NET 1.x, esperaría esto, porque el HttpRuntime executionTimeout predeterminado es menor que WebRequest.Timeout. En .NET 2.0, esperaría esto con los tiempos de espera predeterminados si ya pasó más de 10 segundos antes de realizar la WebRequest saliente (por ejemplo, si tiene más de una WebRequest saliente desde la misma solicitud entrante).

Yo sugeriría que:

  • Reduzca WebRequest.Timeout para solicitudes salientes, y maneje WebException, o

  • Si las solicitudes salientes realmente pueden tomar tanto tiempo, entonces aumente el tiempo de espera de ejecución de httpRuntime como se describe en MSDN .