2010-10-29 21 views
1

J'implémente un fournisseur de rôles et d'appartenances personnalisé dans lequel je dois stocker toutes les informations de rôle/appartenance dans la session de l'utilisateur.Comment accéder à l'objet de session ASP.Net en dehors du projet Web (bibliothèque de classes)

J'implémente ces fournisseurs personnalisés dans un projet de bibliothèque de classes (différent du projet de site Web) et j'ai besoin d'y accéder. L'idée est de stocker les informations liées au rôle/à l'appartenance dans la session après les avoir récupérées pour la première fois dans la base de données.

Lorsque je tente d'accéder à la session en utilisant

System.Web.HttpContext.Current.Session 

Je reçois cela comme un objet nul (référence d'objet non définie à une instance d'un objet.

Pourquoi la session se révèle être null?

+5

Vous devriez pouvoir accéder à la session comme ça, sauf si vous n'êtes pas sur un contexte web (un thread séparé par exemple) –

+2

Est-ce la 'Session' qui est' null', ou 'HttpContext.Current' ? Si c'est le contexte, votre code ne s'exécute pas dans un thread qui gère une requête. –

+0

Le contexte lui-même n'est pas nul. Seul l'objet de session dans le contexte est null. –

Répondre

0

peut-être si vous avez désactivé les sessions, dans un gestionnaire par exemple, ou peut-être la page a un paramètre pour ne pas utiliser la session.

dans le cas contraire il devrait normalement retourner un objet de session, j'ai utilisé la même solution dans mes propres projets.

Mais vous devriez toujours avoir du code à tester pour les pointeurs NULL, juste au cas où.

Avez-vous testé que vous obtenez un HttpContext?

+0

Oui, j'obtiens l'objet de contexte HTTP et d'autres propriétés ont des valeurs pertinentes. Juste la session s'avère être nulle. À quel moment du cycle de vie de la page l'objet session est-il disponible? Se pourrait-il que ce code soit invoqué avant? –

+1

Peut-être mais peu probable. Cette page décrit le cycle de vie de la page, y compris où HttpContext est créé http://msdn.microsoft.com/en-us/library/bb470252.aspx et je ne peux pas voir où le code pourrait être exécuté avant que HttpContext ne soit complètement rempli. –