Sabiendo que hay (al menos) tres API que utilizan internamente Thread.Abort
, me gustaría responder en términos más prácticos, la forma de resolver qué hacer al respecto .
Para nosotros, este error comenzó a registrarse de repente. ¿Qué cambió? Solucionamos un error en algún procedimiento de base de datos que estaba tratando con sitemaps.
Los registros de log4net mostraron que el encabezado X-Forwarded-For (estamos detrás de un NLB) era la dirección IP del robot de Google, 66.249.78.x lo que reforzó mi teoría sobre el cambio del sitemap que lleva a Google a rastrear nuestro sitio de forma más agresiva. para imágenes.
Lo primero fue descubrir por qué solo el robot de Google pudo causar este problema. Ningún otro cliente estaba activando la ruta de código que usa Response.Redirect
, o lo que sea.
Así en el controlador HttpApplication.Error
, he añadido algo de código para registrar la salida adicional detallado con todas las cabeceras, y la mayoría de los datos en la HttpResponse
y HttpContext
vomitado para iniciar la sesión.
Esto me dejó ver que el problema era que el robot de Google está utilizando una cadena de agente de usuario de iPhone y armado con eso, yo era capaz de buscar en la base de código para el "iPhone" y llegar a:
private void CheckIPhoneAccess() { ... }
Y que usa un redireccionamiento
¿Qué hacer al respecto?
Bueno, para esta base de código antigua, no vale la pena retroceder todas las llamadas Response.Redirect
, por lo que voy a reducir el nivel de registro para ThreadAbortException
para la aplicación.
que va a cambiar el comportamiento para el rastreador móvil del robot de Google, que haría no plomo a 'mentiras' sobre lo que nuestro sitio sirve a los móviles, ya que sólo vuelve a dirigir en el primer golpe, posteriormente se lee una cookie y muestra la imagen. Googlebot no parece almacenar en caché esa cookie.
No es perfecto, pero el sitio debe ser reconstruido. probablemente por otro equipo que use Scala o algo así, así que en términos prácticos, creo que esta es una buena opción. Voy a añadir comentarios y puede retomar el tema más adelante, construir una extensión Response.SafeRedirect
que encapsula este consejo:
Why Response.Redirect causes System.Threading.ThreadAbortException?
Lucas
Tenga en cuenta que el enlace anterior está roto – JoshL
La respuesta de Eric es correcta, pero debe tener en cuenta que pasar el parámetro falso significa que el hilo actual no se cancela, es decir, se ejecutará el código después de Response.Redirect. – CodeClimber