asp.net - quien - que pasa con el alma de un bebe abortado espontaneamente
El hilo estaba siendo abortado (6)
Caling Server.Transfer llamará a Response.End, que siempre arroja una ThreadAbortException. Esta es una excepción "especial" porque, aunque se puede atrapar en un bloque catch, siempre se volverá a lanzar al final del bloque catch. Me gustaría que el registro de errores ignore ThreadAbortExceptions.
Estoy usando Server.Transfer . Todo funciona bien, pero el registro de excepción muestra la siguiente excepción.
System.Threading.ThreadAbortException: Thread was being aborted.
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
at System.Web.HttpServerUtility.Transfer(String path)
Cualquier idea para evitar la excepción anterior.
Esta excepción es lanzada por la llamada a Server.Transfer
para detener la ejecución del método actual; exactamente lo mismo se lanza si lo hace Response.Redirect
.
Las dos opciones que tienes son:
- Capture y vuelva a lanzar ThreadAbortException / reperform the
Server.Transfer
- Asegúrese de que solo hace
Server.Transfer
en lugares donde no loServer.Transfer
(recomendado)
EDITAR: Raspe eso, http://support.microsoft.com/kb/312629 tiene un par de otras sugerencias para probar, pero todavía recomiendo el n. ° 2 anterior.
Este problema se produce en los métodos Response.Redirect y Server.Transfer porque ambos métodos llaman a Response.End internamente.
La solución para este problema es la siguiente.
Para Server.Transfer, use el método Server.Execute en su lugar.
Visite este enlace para descargar ejemplos de muestra. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html
Otra forma de resolver esto es detectar el error generado y no volver a lanzarlo:
catch (ThreadAbortException)
{
}
Reemplazar Response.End()
con HttpContext.Current.ApplicationInstance.CompleteRequest();
Reemplazar Response.End () por lo siguiente ayudó a solucionar el problema.
Response.Flush (); Response.Close ();
Referir ¿Podemos usar Response.Flush () en lugar de Response.End ()