реализация сеанса на запрос для WCF, NHibernate, и Ninject

Я пытаюсь реализовать модель сеанса на запрос в своем приложении WCF, и я прочитал бесчисленное количество документов по этой теме, но похоже, что полной демонстрации этого нет. На самом деле я наткнулся на несколько очень полезных статей, таких как эта:

ISession NHibernate, предназначенная для одного вызова WCF

, но все это из старых времен, когда NHibernate и Ninject не имели специфических реализаций WCF, поэтому они добился того, что мне нужно, реализовав своих собственных поставщиков услуг и т. д. Поскольку и Ninject, и NHibernate теперь поддерживают WCF, Я хочу сохранить последовательность, используя их модули, но в итоге я оказался здесь ...

Базовая настройка и последовательность действий должны быть примерно такими:

  1. Установите CurrentSessionContext в WcfOperationSessionContext в конфигурации nhibernate
  2. При запуске службы, начальный запрос или где-нибудь во время инициализации, откройте сеанс и привяжите его к текущему контексту
  3. Репозитории получают текущий экземпляр сеанса с помощью метода SessionFactory.GetCurrentSession ()
  4. Отменить привязку и закрыть сеанс в конце жизненного цикла

Моя первоначальная проблема заключалась в том, что я не мог получить доступ к жизненному циклу wcf для обработки своих привязок. Немного покопавшись в коде ninject, мне удалось подключить свои методы к событиям открытия / закрытия ServiceHost без особых изменений, но тогда я не смог получить доступ к OperationContext, поскольку он является статическим.

Позже я попытался включить совместимость с asp.net и использовать Application_BeginRequest и Application_EndRequest, и это выглядело очень многообещающе, но я не думаю, что это лучшее решение, так как я должен связывать данные с экземпляром службы, а не с HTTP-запросом.

Кто-нибудь когда-нибудь достигал этого, используя встроенные библиотеки расширений wcf ninject? Или есть идеи о том, что я делаю неправильно?

11
задан salimaabey 1 February 2011 в 20:10
поделиться