2009-01-12 5 views
25

Je souhaite envoyer un courrier électronique à un administrateur lorsque l'application se bloque. donc je fais simplement ceci dans global.asax:Gestion de l'erreur Application_Error dans global.asax de l'application ASP.NET

void Application_error(object sender, EventArgs e) 
{ 
    SendMessageToAdministarator(Server.GetLastError().ToString()); 
} 

Mais en fait plusieurs fois Application_Error est appelé, même si l'application ne plantera pas.

Et je souhaite envoyer un message à l'administrateur SEULEMENT lorsque l'application s'est plantée.

De plus, ai-je un moyen simple de réactiver l'application?

Je suis à la recherche de la solution la plus simple.

Répondre

52

Quels types d'erreurs sont envoyés lorsque l'application n'est pas plantée? Vous pouvez vérifier le type d'exception et ne pas envoyer des e-mails sur les exceptions qui ne plantent pas l'application (par exemple une redirection peut jeter le ThreadAbortException que je filtre manuellement dans le code):

protected void Application_Error(Object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    if (ex is ThreadAbortException) 
     return; 
    Logger.Error(LoggerType.Global, ex, "Exception"); 
    Response.Redirect("unexpectederror.htm"); 
} 

Vous pouvez ajouter une redirection vers une page d'erreur avec un message pour l'utilisateur qu'une erreur s'est produite et quelques liens vers des pages pertinentes du site. Ceci est pour le 'soulever l'application sur' - j'espère que c'est ce que vous vouliez.

Vous pouvez également vous intéresser à la journalisation avec log4net qui peut également enregistrer les erreurs sur le serveur et envoyer des e-mails sur les erreurs.

+0

Merci beaucoup. Que voulez-vous dire par "filtrer manuellement dans le code"? aussi, une erreur que je constanly obtenir est certains System.Web.HttpException: le fichier n'existe pas. à System.Web.StaticFileHandler.ProcessRequestInternal (contexte HttpContext) ... mais cela ne fait pas de mal perceptible – Hanan

+0

J'ai mis à jour la réponse avec un exemple de code. Vous pouvez remplacer ThreadAbortException par HttpException. Ou ajoutez plusieurs contrôles là pour plus de types d'exception. – rslite

Questions connexes