Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate会话意外关闭_C#_Asp.net Mvc_Fluent Nhibernate_Castle Windsor - Fatal编程技术网

C# 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会话管理 我能想到的唯一一件事是,呼叫是某人使用相同的会话,第一个完成并关闭它,然后下一个呼叫无法完

我正在为我的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())
.由()实施
(生活方式,短暂),;
这只是另一个提醒,要更加关注这些生活方式