C# NHibernate会话意外关闭
我正在为我的web应用程序使用MVC4、C#、Castle Windsor、fluentnhibernate堆栈,这些堆栈通常工作得很好 我只是偶尔会遇到与nHibernate相关的错误,大致如下: 当读卡器关闭时调用Read的尝试无效 或 内部连接错误 当我连续打多个电话的时候,这通常会让我的头很难看 目前,我正在从JQuery执行多个ajax获取时复制它 我怀疑问题在于我的NHibernate会话管理 我能想到的唯一一件事是,呼叫是某人使用相同的会话,第一个完成并关闭它,然后下一个呼叫无法完成 这是不可能的,因为我的会话是这样处理的:C# NHibernate会话意外关闭,c#,asp.net-mvc,fluent-nhibernate,castle-windsor,C#,Asp.net Mvc,Fluent Nhibernate,Castle Windsor,我正在为我的web应用程序使用MVC4、C#、Castle Windsor、fluentnhibernate堆栈,这些堆栈通常工作得很好 我只是偶尔会遇到与nHibernate相关的错误,大致如下: 当读卡器关闭时调用Read的尝试无效 或 内部连接错误 当我连续打多个电话的时候,这通常会让我的头很难看 目前,我正在从JQuery执行多个ajax获取时复制它 我怀疑问题在于我的NHibernate会话管理 我能想到的唯一一件事是,呼叫是某人使用相同的会话,第一个完成并关闭它,然后下一个呼叫无法完
Kernel.Register(
Component.For<ISessionFactory>()
.UsingFactoryMethod(_ => config.BuildSessionFactory()),
Component.For<ISession>()
.UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession())
.LifestylePerWebRequest());
Kernel.Register(
用于()的组件
.UsingFactoryMethod(=>config.BuildSessionFactory()),
用于()的组件
.UsingFactoryMethod(k=>k.Resolve().OpenSession())
.LifestylePerWebRequest());
每个请求应该有一个会话,对吗
还有什么办法,或者我可以在哪里找到问题?我被卡住了。当然几分钟后就解决了这个问题,但答案让我大开眼界 引导我走上正确的道路 虽然我的所有存储库、管理器和其他层都是使用Castle Windsor以正确的生活方式安装的,但有一个不是 我从一个ActionFilter调用了一个存储库,所有的ActionFilter都是通过一个ActionInvoker类调用的,该类被错误地注册为Singleton,这导致了我的错误
container.Register(Component.For<IActionInvoker>()
.ImplementedBy<WindsorActionInvoker>()
.LifeStyle.***Singleton***);
container.Register(Component.For())
.由()实施
.生活方式。***单身***);
当然应该是
container.Register(Component.For<IActionInvoker>()
.ImplementedBy<WindsorActionInvoker>()
.LifeStyle.Transient);
container.Register(Component.For())
.由()实施
(生活方式,短暂),;
这只是另一个提醒,要更加关注这些生活方式