Использование SharpArch Nhibernate с различными типами SessionStorage - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть серверное приложение, в котором у меня есть 3 сценария, в которых мне, кажется, нужны разные виды сеансов nhibernate:

  1. Вызовы в хранилище напрямую с самого сервера (во время начальной загрузки)
  2. Вызовы в хранилище, поступающие из службы Ria (служба по умолчанию для членов ASP.NET)
  3. Вызовы в хранилище, поступающие из службы WCF

В настоящее время я настроил свойКонфигурация nhibernate с sharparch, как этот

/// <summary>
/// Due to issues on IIS7, the NHibernate initialization cannot reside in Init() but
/// must only be called once.  Consequently, we invoke a thread-safe singleton class to 
/// ensure it's only initialized once.
/// </summary>
protected void Application_BeginRequest(object sender, EventArgs e)
{
   NHibernateInitializer.Instance().InitializeNHibernateOnce(
       () => InitializeNHibernateSession());
    BootStrapOnce();
}       

private void InitializeNHibernateSession()
{
    NHibernateSession.Init(
        wcfSessionStorage,
        new string[] { Server.MapPath("~/bin/bla.Interfaces.dll") },
        Server.MapPath("~/Web.config"));
}

Это работает для третьего сценария, но не для первых двух.Кажется, нужен некоторый контекст, специфичный для wcf-сессии.

Кажется, что метод SharpArch Init защищен от повторной инициализации с другим типом сессионного хранилища;

Каков наилучший способ созданиядругой сеанс для трех разных типов контекстов?

Мне кажется, что этот пост, похоже, связан с с этим , который помог мне взглянуть в правильном направлении, но я не нашелРешение пока.

1 Ответ

1 голос
/ 08 сентября 2011

Я не уверен, что вы сможете делать то, что вы хотите с S #. Причина в том, что вы действительно хотите иметь 3 отдельных сеанса Nhibernate, каждый со своим собственным механизмом хранения. Текущая реализация позволяет использовать только один механизм хранения независимо от количества сеансов.

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

Другим вариантом будет создание собственного управления сеансами для NHibernate и не использование S # по умолчанию. Вы можете посмотреть на код для версии S # и создать свой собственный на основе этого.

...