c# - 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应用程序池回收后会出现这样的错误?尝试解决此问题的更好方法是什么?
解决方案
我想我明白了:执行 InitStorage 后似乎发生了异常。存储已初始化,但标志未就位,我们尝试再次执行此方法。
推荐阅读
- ggplot2 - 直接从 dplyr 绘制条形图
- android - 如何以编程方式使用 MotionLayout 触发动画?
- macos - 如何以编程方式读取 mac 系统首选项?
- angular - Angular 7 - 重新加载页面后的可观察订阅
- docker - Docker-compose 用于多阶段构建?
- android - Android Studio 可能的数据绑定错误
- python - 使用非零 alpha 值时,底图中的 pcolormesh 上会出现奇怪的线条
- gstreamer-1.0 - 如何将过滤器 src 连接到 nvstreammux 接收器
- windows - 无法在 Server 2012 上的 Windows 10 Hyper-V 上运行 Oracle VirtualBox
- excel - 使用 Excel 工作表中的值设置任务的工作完成字段