Я пытаюсь реализовать модель сеанса на запрос в своем приложении WCF, и я прочитал бесчисленные документы по этой теме, но похоже, что это не полная демонстрация этого. Я действительно наткнулся на несколько очень полезных статей, таких как эта:
ISession NHibernate, ограниченный для одного WCF-вызова
но это все из тех давних времен, когда NHibernate и Ninject не имели конкретных реализаций WCF, поэтому они достигли того, что мне нужно, за счет реализации своих пользовательских провайдеров услуг и т. Д. Поскольку и Ninject, и NHibernate имеют поддержку WCF сейчас, я хочу сохраняйте согласованность, используя их модули, но я оказался здесь ...
Базовая настройка и поток должны быть примерно такими:
- Установите для CurrentSessionContext значение WcfOperationSessionContext в конфигурации nhibernate
- При запуске службы, запросе на начало или где-либо еще во время инициализации откройте сеанс и привяжите его к текущему контексту
- Репозитории получают текущий экземпляр сеанса, используя метод SessionFactory.GetCurrentSession ()
- Отмена привязки и закрытие сессии в конце жизненного цикла
Моя первоначальная проблема заключалась в том, что я не мог получить доступ к жизненному циклу wcf для обработки своих привязок. Немного покопавшись в недействительном коде, мне удалось без особых изменений привязать свои методы к событиям открытия / закрытия ServiceHost, но затем я не смог получить доступ к OperationContext, так как он является статичным для потока.
Позже я попытался включить совместимость с asp.net и использовать Application_BeginRequest и Application_EndRequest, и это выглядело очень многообещающе, но я не думаю, что это лучшее решение, так как я должен связывать вещи с экземпляром службы, а не с запросом http.
Кто-нибудь когда-нибудь достигал этого, используя встроенные в nincject библиотеки расширений wcf? Или есть идеи о том, что я могу делать неправильно?