2010-09-08 3 views
2

У меня есть C# решение с 3 проектами - Data, WCF и UI. Первая - это библиотека классов, которая ведет переговоры с db. Он отображается через второй, который имеет тип WCF Service Library - причина этого заключается в том, что он будет показан в третьем проекте - приложение Asp.net под названием UI - как простой svc, указывающий на dll.nHibernate + wcf + Isession

Просто, чтобы указать на это, я не использую шаблон хранилища.

Мне нужно иметь ISession для вызова WCF (аналогично подходу Session-per-request для asp.net). Может ли кто-нибудь поделиться решением, которое просто работает? Я не хочу использовать для этого МОК.

ответ

1

Используйте WcfOperationSessionContext (новый в 3.0).

После того как вы связали, ваши классы данных просто должны использовать SessionFactory.GetCurrentSession().

+0

Будет использовать его точно. Просто, когда nh больше не будет альфой! – IamDeveloper

+0

Если это проблема, вы можете просто скопировать класс отсюда: https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/Context/WcfOperationSessionContext.cs и использовать его в своей конфигурации , –

1

Каждый вызов службы связан с уникальным операционным кодом. OperationContext не имеет хранилища для пользовательских объектов, но вы можете реализовать extension. Установив сеанс в MessageInspector, вы можете инициировать сеанс NHibernate для каждого звонка в централизованном месте и получать доступ к расширенному контексту в любой операции.

+0

Это довольно связанный с WCF. Как насчет использования этого проекта ISession в Data? Я хотел бы сохранить его без каких-либо связанных с WCF знаний. – IamDeveloper

Смежные вопросы