我正在开发一个多线程应用程序,并使用NServiceBus和NHibernate和SQLServer2008RC(使用DTC)。该进程有一个会话工厂。每个线程都有它自己的会话,当事务完成时,它将被释放。我们断断续续地看到下面的异常被抛出,它发生在启动过程5分钟后和启动过程6小时之后。当它发生的时候,似乎没有什么规律。
在终止DTC事务时,AbstractBatcher似乎在关闭命令时遇到了问题。
任何帮助都很感激。
框架版本: v4.0.30319描述:进程由于一个未处理的异常而终止。例外信息: System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[System.__Canon,System.InvalidOperationException Stack: at mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089、System.__Canon、mscorlib、Version=4.0.0.0、Culture=neutralNHibernate.AdoNet.AbstractBatcher.CloseCommands() at NHibernate.AdoNet.AbstractBatcher.Dispose(Boolean) at NHibernate.Impl.SessionImpl.Close() at NHibernate.Impl.SessionImpl.Dispose(Boolean) at NHibernate.Transaction.AdoNetWithDistributedTransactionFactory+<>c_DisplayClass1.b_0(System.Object,System.Transactions.TransactionEventArgs)( System.Transactions.TransactionStatePromotedAborted.EnterState(System.Transactions.InternalTransaction) at System.Transactions.InternalTransaction.DistributedTransactionOutcome(System.Transactions.InternalTransaction,System.Transactions.TransactionStatus) System.Transactions.Oletx.RealOletxTransaction.FireOutcome(System.Transactions.TransactionStatus) at System.Transactions.Oletx.OutcomeEnlistment.InvokeOutcomeFunction(System.Transactions.TransactionStatus) at System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(System.Object,Boolean)
发布于 2012-08-07 10:34:52
看起来这是由于AbstractBatcher中的一些非线程安全的集合访问。当事务被中止时,命令列表将被迭代。如果同时运行另一个命令,它将尝试将该命令添加到命令列表中。这导致了InvalidOperationException。
该问题已登录到NHibernate JIRA中,并已在拉请求中修复。
https://stackoverflow.com/questions/11546635
复制相似问题