2008-11-18 6 views
1

Dans la méthode Application_Error de Global.asax, j'essaie d'extraire une valeur de l'état de la session.accéder à SessionState dans Global.Application_Error

Je peux accéder à l'état de session tant que je lève l'exception. EG:

thow new Exception("Test exception"); 

Toutefois, si elle est une exception non gérée, je reçois l'erreur suivante lorsque vous essayez d'accéder à un état de session: «L'état de session ne sont pas disponibles dans ce contexte ». Pourquoi les différences de comportement, existe-t-il un travail autour?

Merci.

+0

C'est un comportement bizarre. J'utilise une configuration similaire pour enregistrer les informations de formulaire et de session sur les exceptions à des fins de notification sans problème. Je vais vérifier cela dans la matinée au travail. :) – leppie

+0

Je ne suis pas sûr que je suis ce que vous essayez de faire. Si vous lancez manuellement une exception tout fonctionne? Pourriez-vous donner un exemple de code plus complet de ce qui fonctionne et de ce qui ne fonctionne pas? –

Répondre

0

Je pense que vous essayez d'accéder à la session via HttpContext.Current.Session. Je crois que la différence de comportement est que dans le gestionnaire d'exception non géré, la demande est passée en mode "Failsafe" et le cycle de vie de la page (y compris le chargement et l'élimination de la session) est terminé.

Consultez cette page sur la lifecycle pour plus d'infos

2

Je déteste ASP.NET parfois ...

générer donc une erreur en utilisant:

Response.Redirect("thispagedoesnotexist.aspx", false); 

La ligne ci-dessus rediriger vers Application_Error avec l'état de session non disponible

Cependant

throw new Exception("test"); 

La ligne ci-dessus rediriger vers Application_Error avec l'état de la session DISPONIBLE

Ainsi, au lieu de faire tout cela dans Application_Error, en un seul endroit, je vais devoir utiliser essayer/attrape à travers mon code pour détecter les erreurs. Ensuite, rassemblez les données de la session, du journal et des détails de l'erreur de courrier électronique, puis redirigez-vous vers la page d'erreur amicale. Beaucoup de code supplémentaire ..

Conclusion: Application_Error ne vaut rien.

+0

1. Le cas que vous avez mentionné est assez intuitif si vous connaissez le cycle de vie de la page. Dans le second cas, vous lancez une exception plus vers le bas du cycle, où l'état de la requête est rempli, où, comme dans le premier cas, la requête n'a pas l'occasion de le faire. 2. Pour vos cas de gestion des erreurs, utilisez ELMAH. Il fait tout le rassemblement/emailing pour vous. Pas de code supplémentaire. – Iravanchi

Questions connexes