【发布时间】: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