我发现了类似的问题“已经为此应用程序配置了存储机制”,但没有找到明确的答案。
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应用程序池回收后会出现这样的错误?尝试解决此问题的更好方法是什么?