8
votes

NH Demande par session - "La session est fermée!"

Nibernate version: 2.1

J'utilise ce qui semble être une jolie approche HTTPModule standard pour mettre en œuvre des sessions pertrables dans une application ASP.NET + NHibernate. J'essaie de tirer parti de WebsessionContext , mais cela ne semble pas fonctionner correctement. Plus précisément, tout fonctionne brillamment pour la première demande de la demande, mais les demandes supplémentaires entraînent une "session est fermée!" Exception à tout moment la session est utilisée. La réinitialisation du pool d'applications permet à une autre demande de réussir, alors plus de "session est fermée!".

Il y a quelques pièces mobiles, mais je ne sais pas assez sur la façon dont le contexte est géré pour la réduire donc ... voici tout!

dans web.config: xxx

(j'ai essayé de la définir à "web", avec Le même résultat.)

Le module, confirmé à être configuré correctement: xxx

et mon petit assistant: xxx < / pré>


0 commentaires

3 Réponses :


1
votes

J'utilise le gestionnaire de session NHibernate suivant. (C'était originaire d'un article de codeProject que j'avais modifié pour être un peu plus robuste.) Il n'y a pas d'initialisation dans global.aSax, uniquement via des paramètres de configuration dans web.config / hibernate.xml.cfg. xxx < / pré>


1 commentaires

Merci pour le code. J'ai fini par utiliser quelque chose de similaire. Je suis toujours curieux de savoir pourquoi le gestionnaire de contexte de session Web intégré ne fonctionne pas, car il est utilisé dans un tas d'échantillons de code.



0
votes

Juste une suppose, mais que se passe-t-il si vous mettez vos courantssessionContext.unbind à l'intérieur de la portée enfin, juste après la session.close ()? Je ne me souviens pas exactement, mais je pense que l'exécution est terminée après que le bloc enfin effectué, donc si tel est le cas, la session est toujours liée au contexte, et donc jamais expulsé.


2 commentaires

Ohh, attendez une minute. Vous liez une isession mais vous engourdissez la séanceFactory. Ne devriez-vous pas engager la session?


Unbind () accepte vraiment une IsessionFactory et renvoie apparemment l'isession non liée. Peut-être que j'ai besoin d'engourdi () d'abord, puis de commettre / fermer, comme indiqué ici: Bengtbe.com/blog/post/2009/10/08/...



2
votes

L'exemple de NHibernate 1.2 (de NHibernate in Action) montre que l'engouement est effectué avant la fermeture de la fermeture.

Est-ce que ce changement d'aide de commande? p>

var session = NHibernateHelper.GetCurrentSession();
CurrentSessionContext.Unbind(NHibernateHelper.SessionFactory);
...
session.Close();


0 commentaires