【问题标题】:After IIS application pool recycling sometimes an error occurs "A storage mechanism has already been configured" (NHibernate)IIS 应用程序池回收后有时会出现错误“已配置存储机制”(NHibernate)
【发布时间】:2020-01-21 09:23:36
【问题描述】:

我找到了类似的问题"A storage mechanism has already been configured for this application",但没有找到明确的答案。

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

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

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

【问题讨论】:

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

标签: c# iis nhibernate sharp-architecture


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多