miércoles, 8 de octubre de 2008

ThreadAbortException Response.Redirect

Gracias a Pigosky, un geniecillo de la informática, que me pasó este artículo donde se trata el error producido por el Response.Redirect o el Server.Transfer.

Resumiendo se produce porque el Response.Redirect() internamente llama a Response.End() que a su vez llama a Thread.Abort() lo que produce el error.

Para resolver esto usamos el método con el segundo parámetro en false, o sea:

Response.Redirect(mipagina.aspx, false) ;
Con esto evitamos que se llame a Response.End(). Si bien esto resuelve en la mayoría de lo casos el error, es más seguro y eficiente añadir inmediatamente después la linea:
HttpContext.Current.ApplicationInstance.CompleteRequest();
para dar por finalizado el request de la pagina y que ésta no se siga dibujando ni ejecutando.

Ademas como indica el articulo es recomendable hacer override de los métodos RaisePostBackEvent y Render aunque esto último no es tan necesario.

1 comentarios:

Natacuin dijo...

Interesante Mr. Foy, conozco una aplicación que tiene muchos de esos errores en el Event Log, voy a implementar esta solución.