2012-11-23 53 views
0

我正在使用一个MVC4,C#,Castle Windsor,fluentnhibernate堆栈来存储我的web应用程序,它通常工作得很好。NHibernate会话意外关闭

它只是偶尔,我得到有关NHibernate的东西线沿线的一个错误:

无效试图调用时读取器已关闭阅读。

内部连接致命错误。

当我多次打电话时,这通常会拉长它的丑陋的头。

目前我正在复制它,同时从jQuery获取多个ajax。

我怀疑问题是,我的NHibernate会话管理。

我能想到的唯一的事情是,电话是有人使用相同会议上,第一个完成并关闭它,然后下面的调用是无法完成的。

这不应该是可能的,因为我的会话这样的处理方式:

Kernel.Register(
       Component.For<ISessionFactory>() 
           .UsingFactoryMethod(_ => config.BuildSessionFactory()), 
       Component.For<ISession>() 
           .UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession()) 
           .LifestylePerWebRequest()); 

应为请求权为一个会议?

还有其他方面,或者我可以在哪里寻找问题?我很困难。

回答

0

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

This answer让我走下了正确的道路。

虽然我的所有知识库,经理和其他图层都使用Castle Windsor以正确的生活方式安装,但还是有一个不是。

我正在做一个来自ActionFilter的Repository调用,我的所有动作过滤器都是通过一个ActionInvoker类调用的,该类被错误地注册为Singleton,导致我的错误。当然应该

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

​​

又一个提醒要密切注意那些生活方式。