我正在开发一个多线程应用程序,并使用 NServiceBus 和 NHibernate 与 SQL Server 2008RC(使用 DTC)。该进程有一个会话工厂。每个线程都有自己的 Session ,在事务完成时被处理掉。我们间歇性地看到下面的异常被抛出,它发生在启动进程后 5 分钟和启动进程后 6 小时。它发生的时间似乎没有规律。
当 DTC 事务中止时,AbstractBatcher 似乎在关闭命令时遇到了麻烦。
非常感谢任何帮助。
框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:System.InvalidOperationException 堆栈:在 System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[[System._ Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System. _Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext() 在 NHibernate.AdoNet.AbstractBatcher.CloseCommands() 在 NHibernate.AdoNet.AbstractBatcher.Dispose(Boolean) 在 NHibernate.Impl.SessionImpl .Close() 在 NHibernate.Impl.SessionImpl.Dispose(Boolean) 在 NHibernate.Transaction.AdoNetWithDistributedTransactionFactory+<>c_ DisplayClass1.b_0(System.Object, System.Transactions.TransactionEventArgs) 在 System.Transactions.TransactionCompletedEventHandler.Invoke(System.Object, System.Transactions.TransactionEventArgs) 在 System.Transactions.TransactionStatePromotedAborted.EnterState(System.Transactions.InternalTransaction) 在 System.Transactions .InternalTransaction.DistributedTransactionOutcome(System.Transactions.InternalTransaction, System.Transactions.TransactionStatus) 在 System.Transactions.Oletx.RealOletxTransaction.FireOutcome(System.Transactions.TransactionStatus) 在 System.Transactions.Oletx.OutcomeEnlistment.InvokeOutcomeFunction(System.Transactions.TransactionStatus) ) 在 System.Threading._ThreadPoolWaitOrTimerCallback 的 System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(System.Object, Boolean)。PerformWaitOrTimerCallback(System.Object, Boolean)