samedi 9 octobre 2010

Empêcher une application web de ne pas démarrer correctement

Pour initialiser votre site web ASP.net vous aller peut-être utilisé la méthode Application_Start du fichier Global.asax. L’Application_Start n’est utilisé qu’à la première requête reçu par l’application et si une exception se produit dans le corps de cette méthode, l’utilisateur recevra une page d’erreur … soit. Mais si une deuxième requête arrive, l’Application_Start n’est pas exécuté une seconde fois, et votre site vas exécuter des pages dans une application qui n’est pas correctement initialisé.

L’exemple ci dessous permet de forcer le redémarrage de l’application lors d’une exception de l’Application_Start.

protected void Application_Start(object sender, EventArgs e)
{
try
{
// ...
// corps original de la méthode
// ...
}
catch (Exception ex)
{
var html = "<html>" +
"<h1>Application initialisation error</h1>" +
"Please contact the administrator.";
#if DEBUG
html += "[" + DateTime.Now.ToString() + "-" + ex.GetType().Name + "]" + ex.Message;
#endif
html += "</html>";

this.Context.Response.StatusCode = 500; // Server error code
this.Context.Response.Write(html);

// Si une erreur se produit lors de l'initialisation de l'application
// Il est très important de ne pas permettre à celle ci de tourner quand même
// C'est pourquoi on décharge le domaine.
HttpRuntime.UnloadAppDomain();
}
}

Aucun commentaire: