7
TransactionScope是否在某些计算机上自动升级为MSDTC?
在我们的项目中,我们使用TransactionScope来确保我们的数据访问层在事务中执行其动作。我们的目标是不要求在最终用户的计算机上启用MSDTC服务。 麻烦的是,在我们一半的开发人员机器上,我们可以在禁用MSDTC的情况下运行。另一半必须启用它,否则他们会收到“ [SERVER]上的MSDTC不可用”错误消息。 这真的让我抓狂了,还让我认真考虑回滚到基于ADO.NET事务对象的类似HomeScope的TransactionScope解决方案。这似乎是疯狂的-在我们一半的开发人员的代码上起作用(并且不会升级)的相同代码确实会在其他开发人员的代码上升级。 我希望对Trace有了一个更好的答案,为什么交易会升级为DTC,但不幸的是却没有。 这是会引起问题的示例代码,在尝试升级的机器上,它尝试在第二个连接上升级.Open()(是的,当时没有其他连接打开)。 using (TransactionScope transactionScope = new TransactionScope() { using (SqlConnection connection = new SqlConnection(_ConStr)) { using (SqlCommand command = connection.CreateCommand()) { // prep the command connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { // use the reader connection.Close(); } } } // Do other stuff here …