首页 > 解决方案 > IIS 应用程序池回收后有时会出现错误“已配置存储机制”(NHibernate)

问题描述

我发现了类似的问题“已经为此应用程序配置了存储机制”,但没有找到明确的答案。

IIS 应用程序池回收后有时会出现错误“已配置存储机制”(NHibernate)。如果出现错误,应用程序将停止工作并因每个请求出现此错误而崩溃。只有反复回收或iisreset才能有所帮助。

我们在方法中初始化 NHibernate 也很奇怪Application_BeginRequest(在每个请求上),但是无论我在哪里看到都这样做,即使在Sharp-Architecture 示例中也是如此。

我在 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应用程序池回收后会出现这样的错误?尝试解决此问题的更好方法是什么?

标签: c#iisnhibernatesharp-architecture

解决方案


我想我明白了:执行 InitStorage 后似乎发生了异常。存储已初始化,但标志未就位,我们尝试再次执行此方法。


推荐阅读