web-dev-qa-db-fra.com

L'état de session n'est pas disponible dans ce contexte

Je souhaite lire l'identifiant de session dans l'événement d'erreur d'application mais toujours obtenir l'erreur "L'état de session n'est pas disponible dans ce contexte". Pourquoi? La chose étrange est que j'ai le même code dans une autre application asp.net et que tout fonctionne bien.

void Application_Error(object sender, EventArgs e)
{

        var sessionId = Session.SessionID;
        //skipped code

}
23
Tomas

L'objet de session peut ne pas être disponible, cela dépend du moment où l'erreur s'est produite.

Par exemple, si une erreur se produit sur Begin_Request, la session ne sera pas disponible car elle n'a pas encore été créée.

Donc, en résumé, parfois, cela ne fonctionnera parfois pas, en fonction du moment où l'erreur est survenue.

Il est préférable de vérifier l'état de l'objet de session avant d'accéder à l'identifiant de session, par exemple.

HttpContext context = HttpContext.Current;

if (context != null && context.Session != null) ...
31
edge2

vérifie s'il manque un événement dans c # associé à un contrôle ou à un problème dans la pièce de conception

2
sankar raman

Vous pouvez obtenir cette erreur si vous utilisez un mode d'état Hors processus pour le serveur d'état ASP.NET. Vous devez marquer les classes que vous souhaitez enregistrer dans l'état de session avec l'attribut [Serializable].

1
codecypher

Application_error peut se déclencher dans les situations où aucune session n'est présente, par exemple lorsque le ramasse-miettes nettoie. La source de l'erreur peut ne pas avoir été un thread utilisateur.

Il suffit de vérifier si la session est d'abord nulle.

Simon

1
Simon Halsey