如何抑制TransationScope的错误?

时间:2016-04-29 05:00:04

标签: c# asp.net .net

当我使用TransactionScope时遇到此问题,我想仅禁止此错误,并且不想进行任何配置(设置)。

错误讯息:

  

分布式事务管理器(MSDTC)的网络访问已经完成   禁用。请在安全性中启用DTC以进行网络访问   使用组件服务管理的MSDTC配置   工具。

错误行:

_cacheLogic.UpdateCache<List<CustomEntity>>(Detail, CacheConstants.RM_CACHE_GET_DETAIL, cacheKey);

2 个答案:

答案 0 :(得分:0)

  1. 如果你想使用TransactionScope,那么压制错误是不够的。

  2. 要在代码中使用TransactionScope,您需要从服务器上的Microsoft Distributed Transactions Coordinator (MSDTC)启用Component Services。 以下是启用它的详细步骤:http://pongsathonkeng.blogspot.in/2011/02/msdtc-setup.html

  3. 此外,该错误还表明需要向MSDTC提供某些与网络相关的访问。为此,您可以查看上面链接中的第2步。

  4. 此外,here是一种工具,可让您在之后测试设置。

答案 1 :(得分:0)

因此,您在一个事务范围内使用多个数据源。发生这种情况时,应该发生分布式事务,并且在您的情况下,分布式事务管理器未正确配置。正如我从您的问题中所理解的那样,您并不想解决这个问题,也不需要进行分布式交易。然后,您需要更改代码,以便在同一TransactionScope下不再使用多个数据库。假设你有类似的东西:

using (var transaction = new TransactionScope()) {
    var data = SelectSomeDataFromDatabaseA();
    if (data.IsFine) {
        InsertSomeDataInDatabaseB();
    }
    transaction.Complete();
}

在这里,您正在使用一个事务范围内的数据库A和B,但您并不需要这样做 - 只需从事务范围外的数据库A中移动代码选择数据库。

另请注意,在某些情况下,即使您使用相同的数据库,也可能会启动分发事务 - 如果您使用不同的使用相同的数据库,则可能会发生这种情况连接。如果是这种情况 - 避免创建多个连接,而是将相同的连接实例传递给您需要的所有方法。