我正在为我的网络应用程序使用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());
每个请求应该是一个会话吗?
我还能在哪里找到问题?我很困惑。
答案 0 :(得分:0)
当然,几分钟后解决了这个问题,但答案对我来说是个大开眼界。
This answer让我走上了正确的道路。
虽然使用Castle Windsor安装了所有我的存储库,管理器和其他图层,但有一个不是。
我正在从ActionFilter进行Repository调用,我的所有动作过滤器都是通过一个ActionInvoker类调用的,该类被错误地注册为Singleton,这导致了我的错误。
container.Register(Component.For<IActionInvoker>()
.ImplementedBy<WindsorActionInvoker>()
.LifeStyle.***Singleton***);
当然应该
container.Register(Component.For<IActionInvoker>()
.ImplementedBy<WindsorActionInvoker>()
.LifeStyle.Transient);
再提醒一下,要密切关注那些生活方式。