¿Cómo locking el Pool de aplicaciones?

Nuestra aplicación web ASP.NET 2 maneja excepciones muy elegantemente. Detectamos excepciones en Global ASAX en Application_Error. Desde allí registramos la excepción y mostramos un mensaje amigable al usuario.

Sin embargo, esta mañana implementamos la última versión de nuestro sitio. Se ejecutó bien durante media hora, pero luego el Pool de aplicaciones se colgó. El sitio no volvió a aparecer hasta que restablecimos la versión anterior.

¿Cómo puedo hacer que el grupo de aplicaciones se bloquee y omita el manejador de excepciones normal? Estoy tratando de replicar este problema, pero sin suerte hasta el momento.


Actualización : encontramos la solución. Una de nuestras páginas fue screencraping en otra página. Pero la URL se configuró de manera incorrecta y la página terminó capturando pantallas infinitamente, causando una excepción de desbordamiento de la stack.

El error más común que he visto y el “locking del grupo” es la llamada de bucle.

public string sMyText { get {return sMyText;} set {sMyText = value;} } 

Simplemente llame al sMyText …

Para hacer esto, todo lo que necesita hacer es lanzar cualquier excepción (sin manejarla, por supuesto) desde fuera del contexto de una solicitud .

Por ejemplo, alguna excepción planteada en otro hilo debería hacerlo:

 protected void Page_Load(object sender, EventArgs e) { // Create a thread to throw an exception var thread = new Thread(() => { throw new ArgumentException(); }); // Start the thread to throw the exception thread.Start(); // Wait a short while to give the thread time to start and throw Thread.Sleep(50); } 

Puede encontrar más información aquí en MS Knowledge Base

La respuesta de Aristos es buena. También lo he visto hecho con una anulación estúpida en el ciclo de vida de la página cuando alguien cambia el método modificado de OnInit a OnLoad sin cambiar la llamada base, por lo que recursó la ronda en círculos a lo largo del ciclo de vida: es decir

 protected override void OnLoad(EventArgs e) { //some other most likely rubbish code base.OnInit(e); } 

Podría intentar lanzar una ThreadAbortException .

    Intereting Posts