System.Runtime.InteropServices.COMException:由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务。可能的原因是:存在防火墙,并且它没有针对 MSDTC 进程的例外,两台计算机无法通过其 NetBIOS 名称找到对方,或者两个事务管理器之一未启用对网络事务的支持。(来自 HRESULT 的异常:0x8004D02B)
从应用服务器收集的日志
时间=2018/12/18-15:58:08.204 序列=115 事件 ID=TRACING_STARTED
时间=2018/12/18-15:58:36.343 序列=116 事件 ID=TRANSACTION_ABORTING
时间=2018/12/18-15:58:36.343 序列=117 事件 ID=TRANSACTION_ABORTED
时间=2018/12/18-15:58:58.705 序列=118 事件 ID=TRACING_STOPPED
从数据库服务器 (SQL Server) 收集的日志
时间=2018/12/18-15:58:30.302 序列=386 事件 ID=TRANSACTION_BEGUN
时间=2018/12/18-15:58:30.302 序列=387 事件 ID=RM_ENLISTED_IN_TRANSACTION 时间=
2018/12/18-15:58:36.349 序列=388 事件 ID=RECEIVED_ABORT_REQUEST_FROM_BEGINNER
时间=2018/12/18-15:58:36.349 序列=389 事件 ID=TRANSACTION_ABORTING
时间=2018/12/18-15:58:36.349 序列=390 事件 ID=RM_ISSUED_ABORT
时间 = 2018/12/18-15:58:36.349 序列 = 391 事件 ID = RM_ACKNOWLEDGED_ABORT
时间 = 2018/12/18-15:58:36.349 序列 = 392 事件 ID = TRANSACTION_ABORTED
这表明两台机器能够相互通信,事务已启动,但应用程序发送一条消息来中止该事务。
这种情况间歇性发生,有人能告诉我什么原因可能导致应用程序中止交易吗?
导致此异常的代码块具有给定的形式
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
// Data insertion
// DbContext.SaveChanges()
// Data update
// DbContext.SaveChanges()
transactionScope.Complete();
}