Pregunta

Estoy usando Server.Transfer . Todo funciona bien, pero el registro de excepciones 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.

¿Fue útil?

Solución

Esta excepción es lanzada por la llamada a Server.Transfer para detener la ejecución del método actual: exactamente lo mismo si arroja Response.Redirect .

Las dos opciones que tiene son:

  • Atrapa y vuelve a lanzar ThreadAbortException / reperform the Server.Transfer
  • Asegúrate de que solo haga Server.Transfer en lugares donde no será atrapado (recomendado)

EDITAR: Rasca eso, http://support.microsoft.com/ kb / 312629 tiene algunas otras sugerencias para probar, pero todavía recomiendo el n. ° 2 anterior.

Otros consejos

Otra forma de resolver esto, es detectar el error generado y no volver a lanzarlo:

        catch (ThreadAbortException)
        { 
        }

Caling Server.Transfer llamará a Response.End, que siempre arroja una ThreadAbortException. Este es un "especial" excepción porque, si bien puede capturarse en un bloque de captura, siempre se volverá a lanzar al final del bloque de captura. Me gustaría que su registro de errores ignore ThreadAbortExceptions.

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 ver un ejemplo de descarga. http://jayeshsorathia.blogspot.com/2012 /03/thread-was-being-aborted-error-occured.html

Reemplazar Response.End () por lo siguiente ayudó a solucionar el problema.

Response.Flush (); Response.Close ();

Consulte ¿Podemos usar Response.Flush () en lugar de Response.End ()

Reemplace Response.End () con HttpContext.Current.ApplicationInstance.CompleteRequest();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top