繁体   English   中英

NHibernate会话意外关闭

[英]NHibernate session closing unexpectedly

我为我的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());

每个请求应该一次会话吗?

还有什么方法,或者在其他地方可以找到问题? 我很困。

几分钟后当然解决了这个问题,但答案让我大开眼界。

这个答案使我走上了正确的道路。

虽然我所有的存储库,管理器和其他层都使用Castle Windsor进行了正确的生活方式安装,但其中没有一个。

我正在从ActionFilter进行存储库调用,我所有的动作过滤器都是通过ActionInvoker类调用的,该类被错误地注册为Singleton,这导致了我的错误。

container.Register(Component.For<IActionInvoker>()
                                    .ImplementedBy<WindsorActionInvoker>()
                                    .LifeStyle.***Singleton***);

当然应该

container.Register(Component.For<IActionInvoker>()
                                    .ImplementedBy<WindsorActionInvoker>()
                                    .LifeStyle.Transient);

另一个提醒是要更加注意那些生活方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM