首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DTC事务关闭时的InvalidOperation in NHibernate AbstractBatcher

DTC事务关闭时的InvalidOperation in NHibernate AbstractBatcher
EN

Stack Overflow用户
提问于 2012-07-18 17:01:59
回答 1查看 484关注 0票数 0

我正在开发一个多线程应用程序,并使用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)

EN

回答 1

Stack Overflow用户

发布于 2012-08-07 10:34:52

看起来这是由于AbstractBatcher中的一些非线程安全的集合访问。当事务被中止时,命令列表将被迭代。如果同时运行另一个命令,它将尝试将该命令添加到命令列表中。这导致了InvalidOperationException。

该问题已登录到NHibernate JIRA中,并已在拉请求中修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11546635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档