Инициализация NHibernate в Application_Start - PullRequest
3 голосов
/ 08 июня 2011

Я использую Asp.Net MVC и NHibernate.

Некоторые из моих файлов Global.asax показаны ниже:

 public override void Init()
    {
        base.Init();

        // The WebSessionStorage must be created during the Init() to tie in HttpApplication events
        webSessionStorage = new WebSessionStorage(this);

    }


    /// <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)
    {

        //the following code sets up the NHibernate Session Factory
        NHibernateInitializer.Instance().InitializeNHibernateOnce(
            () => InitializeNHibernateSession());
    }

Всякий раз, когда AppPool перезагружается, выполнение следующего запроса занимает некоторое время, поскольку ему приходится ждать инициализации NHibernateSessionFactory. После этого все в порядке, пока не будет перезапущен следующий пул приложений.

Теперь я хотел бы переместить инициализацию в метод Application_Start, чтобы при повторном запуске пула перезапуск выполнял тяжелый PRIOR до следующего входящего запроса. Однако появляется комментарий «Из-за проблем в IIS7», который приходит из архитектуры S # arp я понял, что это не так просто.

Я нашел статью: http://scottsdalewebstudio.com/blog/mvc/mvc-sharp-iis7-nhibernate/, в которой говорится, что настройка IIS для использования «Классического режима» исправляет это - это единственный способ?

...