NHibernate ISERSENSION使用和线程安全

NHibernate ISERSENSION使用和线程安全,nhibernate,asp.net-mvc-2,autofac,Nhibernate,Asp.net Mvc 2,Autofac,当我将ISession生存期配置为“每个HTTP请求”(我正在使用的Autofac中的InstancePerLifetimeScope)时,NHibernate profiler告诉我会话正在跨线程使用,这很可能是一个bug。发生了什么事? 我习惯于认为我应该将工作单元的范围限定在http请求上,但似乎会话确实被跨THRED使用 本质上,“每个HTTP请求的ISession”与NHibernate探查器警报冲突。 我错在哪里 更新:我的Web.config中确实有一个ContainerDispo

当我将ISession生存期配置为“每个HTTP请求”(我正在使用的Autofac中的InstancePerLifetimeScope)时,NHibernate profiler告诉我会话正在跨线程使用,这很可能是一个bug。发生了什么事? 我习惯于认为我应该将工作单元的范围限定在http请求上,但似乎会话确实被跨THRED使用

本质上,“每个HTTP请求的ISession”与NHibernate探查器警报冲突。 我错在哪里

更新:我的Web.config中确实有一个ContainerDisposalModule,因此处理工作正常

IIS(与大多数Web服务器一样)使用多个线程来处理请求,因此这可能不是应用程序中的错误,您可以安全地忽略警告


另请参见。

请评论您的决定,谢谢+1反对否决票。这是一个非常合理的问题。您的IIS版本的Web.config的正确部分中是否有ContainerDisposalModule?另一个线程可能是终结器..我知道asp.net在线程池中的线程上执行每个请求。但是AFAIK不应该在单个请求中使用多个线程。每个请求内部都是单线程的,不是吗?@Valentin Vasiliev:如果它是异步的,它可以跳转线程-不要假设所有工作都在同一个线程上处理“如果它是异步的”-什么是异步的?我没有使用异步控制器。我假设当控制器被实例化时,它的动作方法只在一个线程上被调用。因此,问题仍然存在,NH prof如何可能在asp.net mvc控制器的一个实例中检测到跨线程的使用情况?IIS/asp.net可以而且确实使用多个线程来处理单个请求。例如,它可能会在另一个线程上加载外部文件(.js或图像)。您可以通过在Session_EndRequest中处理ISession来轻松演示这一点——这偶尔会导致“无会话或会话已关闭”错误。