IIS 应用程序池回收后,有时会发生错误 "A storage mechanism has already been configured" (NHibernate)



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

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

同样奇怪的是,我们正在Application_BeginRequest方法(在每个请求上(初始化 NHibernate,但无论我在哪里寻找,即使在 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 应用程序池回收后会发生此类错误?尝试解决此问题的更好方法是什么?

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

相关内容

最新更新