Asp.net mvc 应用程序启动中的NHibernate初始化
我正在使用Asp.NETMVC和NHibernate 下面显示了一些我的Global.asax文件:Asp.net mvc 应用程序启动中的NHibernate初始化,asp.net-mvc,s#arp-architecture,Asp.net Mvc,S#arp Architecture,我正在使用Asp.NETMVC和NHibernate 下面显示了一些我的Global.asax文件: public override void Init() { base.Init(); // The WebSessionStorage must be created during the Init() to tie in HttpApplication events webSessionStorage = new WebSession
public override void Init()
{
base.Init();
// The WebSessionStorage must be created during the Init() to tie in HttpApplication events
webSessionStorage = new WebSessionStorage(this);
}
/// <summary>
/// Due to issues on IIS7, the NHibernate initialization cannot reside in Init() but
/// must only be called once. Consequently, we invoke a thread-safe singleton class to
/// ensure it's only initialized once.
/// </summary>
protected void Application_BeginRequest(object sender, EventArgs e)
{
//the following code sets up the NHibernate Session Factory
NHibernateInitializer.Instance().InitializeNHibernateOnce(
() => InitializeNHibernateSession());
}
public override void Init()
{
base.Init();
//必须在Init()期间创建WebSessionStorage,以连接HttpApplication事件
webSessionStorage=新的webSessionStorage(此);
}
///
///由于IIS7上的问题,NHibernate初始化无法驻留在Init()中,但
///只能调用一次。因此,我们调用一个线程安全的单例类来
///确保它只初始化一次。
///
受保护的无效应用程序\u BeginRequest(对象发送方,事件参数e)
{
//以下代码设置NHibernate会话工厂
NHibernateInitializer.Instance().InitializeNHibernateOnce(
()=>InitializeNHibernateSession());
}
无论何时AppPool回收,下一个请求都需要一段时间才能执行,因为它必须等待NHibernateSessionFactory进行初始化。之后,一切都很好,直到下一个应用程序池回收
现在,我想将初始化移到Application_Start方法中,这样当池回收时,重启会在下一个请求到来之前完成繁重的工作。然而,来自S#arp体系结构的“由于IIS7问题”的评论让我意识到这并不是那么简单
我确实发现了一篇文章:这篇文章建议将IIS设置为使用“经典模式”来修复它——这是唯一的方法吗