2010-11-02 32 views
14

Je veux savoir quelles parties du cycle de vie de la requête ASP.NET se produisent après le traitement d'une erreur via l'événement HttpApplication.Error. Plus précisément, lequel des événements énumérés à http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages feu après une erreur? Je sais que EndRequest se déclenche toujours, et je soupçonne que PreSendRequestHeaders et PreSendRequestContent se déclenchent également, mais à part cela, je n'en ai aucune idée.Quels événements du cycle de vie ASP.NET se déclenchent après HttpApplication.Error?

Est-ce que cela dépend de quand l'erreur se produit dans le cycle de vie? Cela dépend si j'appelle Server.ClearError() dans le gestionnaire d'erreurs?

Je pose cette question parce que je ne sais pas si je devrais appeler HttpApplication.CompleteRequest() à partir de mon gestionnaire d'erreurs.

+1

Dommage que personne n'a vraiment répondu directement à la question de ** quels événements ** se déclenchent après le traitement d'une erreur. –

Répondre

0

L'événement LogRequest est déclenché même si une erreur se produit. Vous pouvez fournir un gestionnaire d'événements pour l'événement LogRequest afin de fournir une journalisation personnalisée pour la demande. pour plus de détails sur http://msdn.microsoft.com/en-us/library/system.web.httpapplication.logrequest.aspx

Si votre application génère la sortie d'erreur personnalisée, supprimer le message d'erreur par défaut qui est généré par ASP.NET par un appel à la méthode ClearError dans le HttpApplication.Error événement.

0

Je n'ai pas vérifié, mais je pense que cela dépend.

Une erreur peut être déclenchée dans n'importe quel événement de page (Init/Load/PreRender). Une fois l'erreur levée, si vous effacez l'erreur, le cycle de vie de la page reprend là où il était.

0

L'exception qui déclenche l'événement Error peut être accédée par un appel à la méthode GetLastError. Si votre application génère une sortie d'erreur personnalisée, supprimez le message d'erreur par défaut généré par ASP.NET par un appel à la méthode ClearError.

3

La meilleure façon est d'attraper serveur dernière erreur et exceptions AppDomain.

Toutes ces opérations peuvent être effectuées dans le fichier Global.asax.cs.

Vérifiez les étapes suivantes:

1- Dans Global.asax.cs, attraper la dernière erreur et LOGGUE.

protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 
     Server.ClearError(); 
     log.Error("Application Error caught in Global ", exception); 
    } 

2- Ajouter un gestionnaire d'événements pour l'événement UnhandledException sur AppDomain, cela devrait être ajouté à la Application_Start:

protected void Application_Start(object sender, EventArgs e) 
    { 
     //.... 
     AppDomain.CurrentDomain.UnhandledException 
       += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
    }  

3- Et voici la mise en œuvre de CurrentDomain_UnhandledException:

void CurrentDomain_UnhandledException(object sender, 
                UnhandledExceptionEventArgs e) 
    { 
     if (e != null) 
     log.Error("Domain Unhandled Exception: ", e.ExceptionObject as Exception); 
    } 

Codage heureux :)