2009-11-16 6 views
1

J'ai une bibliothèque de base de code qui a plusieurs frontaux. Un frontal est un service WCF, un autre est une application de console qui lance simplement des commandes de longue durée exécutant des calculs financiers et d'autres logiques métier. J'essaie de comprendre comment gérer mon ISession dans l'application console. Je "pourrais" juste avoir une session par "commande", mais certaines des commandes sont en cours d'exécution et je suis inquiet d'avoir une session ouverte aussi longtemps et/ou d'être trop pléthorique. Des pointeurs pour ce type de scénario?NHibernate Session Management dans l'application Console

Gestion de la session NH dans une application web est tellement plus facile ...;)

Répondre

1

Vous pouvez soit avoir la chasse ISession périodiquement (par exemple tous les 5-30 secondes, en fonction de la quantité d'insertions/modifications/supprime être effectué) ou quand il est critique. J'ai récemment utilisé la fonctionnalité AOP dans Spring .Net framework pour exécuter après que certaines méthodes ont été exécutées dans un processus qui prendrait peut-être 30 minutes pour se terminer.

+0

Donc, vous suggérez une ISession et rinçage si nécessaire? Je jouais avec ça. Que se passe-t-il si dans un processus j'obtiens une exception? Je peux disposer de la session mais je dois en créer une nouvelle car je dois poursuivre les opérations. – Bob

+0

Tant que votre application de console. ne fonctionne pas sur plusieurs threads/processus, un seul ISession devrait fonctionner correctement. Si une exception est levée dans votre application, vous devrez faire face à la possibilité que vous perdiez des données, mais vous pouvez toujours essayer de vider l'ISession dans le code de gestion des erreurs. Plutôt que de recréer l'ISession après avoir appelé Flush(), appelez simplement la méthode Clear(). Clear() supprimera toutes les informations "meta" sur les objets de l'ISession - avec des opérations longues/longues que cela peut créer et ralentir vraiment les performances. – WiseGuyEh