2013-11-21 52 views
0

我们有一个简单的nservicebus(v4)设置,其中一个web应用程序发送各种消息到后端端点进行处理。一切进展顺利,直到提高并发级别。通常情况下,但不是所有的时候,我们会得到下面的异常 -NHibernate会话问题NServiceBus

System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first. 

我猜这必须是与NHibernate的(V3.1)会话管理的问题。现在,我们在每个处理程序中创建一个具有单例生命周期的新会话工厂和会话(因此每个处理程序都应该有它自己的会话,对吗?)。基于这个异常的最佳猜测是,会话中的连接正在被另一个处理程序使用?

任何人都可以点亮一下吗?为什么这是一个不一致的问题?

+0

追加代码以显示结构中的使用方式,例如, TransactionScope和NHibernate交易请。 –

回答

0

发现问题。我在每个处理程序中初始化结构图ObjectFactory,因此每个新消息都会覆盖最初初始化的另一个消息(在另一个线程上)。这意味着所有线程都使用最近创建的消息的会话。在IWantCustomInitialization的Init()方法中引导似乎解决了这个问题。