Ode*_*ded 10 .net msdtc transactions distributed-transactions sql-server-2008
如何可靠地检查MSDTC是否已将事务提升为分布式事务?
这是在.net中使用TransactionScope时.
目前,同事正在通过关闭其计算机上的协调器来测试这一点 - 如果抛出异常,则将其视为促使事务发生的尝试的证据.这是一个有效的测试吗?
Ran*_*ica 13
我认为您的测试没问题,但您应该确保获得DTC异常而不是其他异常.
你可以做的其他一些事情:
您还可以运行SQL事件探查器并在事务跟踪DTCTransaction下.
在代码方面,您可以处理DistributedTransactionStarted事件并在启动分布式事务时记录消息.
或者您可以添加日志消息以System.Transactions.Transaction.Current.
TransactionInformation.DistributedIdentifier在事务结束之前记录.如果值为Guid.Empty {00000000-0000-0000-0000-000000000000},则它不是分布式事务,否则事务已提升为分布式事务.
您说您使用的是SQL Server 2008.您使用的是什么版本的.NET?是3.5吗?如果您使用的是SQL Server 2008和.NET 3.5,那么您应该能够在同一事务中打开多个连接(使用相同的连接字符串)到同一个数据库,而不会升级到分布式事务.为此,您需要在打开第二个连接之前关闭第一个连接.
如果看来满足所有条件且交易仍在升级,我会:
更新:在分布式事务处理协调器(MSDTC)和交易常见问题拉在一起MSDTC资源的极大列表.