После перезапуска пула приложений IIS иногда возникает ошибка «Механизм хранения уже настроен» (NHibernate) - PullRequest
0 голосов
/ 21 января 2020

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

После перезапуска пула приложений IIS иногда возникает ошибка "A Механизм хранения уже настроен »(NHibernate). В случае ошибки приложение перестает работать и вылетает с этой ошибкой для каждого запроса. Поможет только повторная переработка или iisreset.

Также странно, что мы инициализируем NHibernate в методе Application_BeginRequest (по каждому запросу), но куда бы я ни посмотрел, везде, даже в Sharp- Примеры архитектуры .

У меня есть следующий код в файле Global.asax:

using System;
using System.Web;
using SharpArch.NHibernate;
using SharpArch.NHibernate.Wcf;

public class GlobalAsax : HttpApplication
{
    private WcfSessionStorage _webSessionStorage;

    public override void Init()
    {
        base.Init();
        _webSessionStorage = new WcfSessionStorage();
    }

    public void Application_Start(object sender, EventArgs e) { }

    public void Application_BeginRequest(object sender, EventArgs e)
    {
        NHibernateInitializer.Instance().InitializeNHibernateOnce(Initialize);
    }

    private void Initialize()
    {
        NHibernateSession.InitStorage(_webSessionStorage); // <- An error occurs here.

        // var configFolder = Server.MapPath(...);
        // NHibernateSession.AddConfiguration(...);
    }
}

Класс NHibernateInitializer является одиночным и выглядит как поточно-ориентированный. Метод Initialize должен быть выполнен только один раз, но оказывается, что это не так.

Почему такая ошибка может возникнуть после перезапуска пула приложений IIS? Какой лучший способ попытаться это исправить?

1 Ответ

0 голосов
/ 21 января 2020

Мне кажется, я понял: похоже, что исключение происходит после выполнения InitStorage. Хранилище уже инициализировано, но флаг не установлен, и мы пытаемся выполнить этот метод снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...