2016-04-29 42 views
0

面对这个问题,当我在使用TransactionScope时,我想压制这个错误只有并且不想做任何配置(设置)。如何抑制TransationScope的错误?

错误消息:分布式事务管理器

网络访问(MSDTC)已被禁用 。请使用组件服务管理 工具为MSDTC配置安全 配置中的DTC以启用网络访问。

错误行:

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

可能的重复[如何修复分布式事务管理器(MSDTC)已被禁用错误](http://stackoverflow.com/questions/2050512/how-to-fix-distributed-transaction-manager-msdtc-has-被禁用,错误) – gmiley

回答

0
  1. 如果您希望使用TransactionScope,supressing错误是不够的。

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

  3. 此外,错误还表示需要将某些与网络相关的访问权限授予MSDTC。为此,您可以查看上面链接中的第2步。

此外,here是工具,使您测试设置,事后。

0

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

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

在这里,您与数据库A和B中一个事务范围内的工作,但你并不真的需要做到这一点 - 只要将代码从数据库中的外事务范围选择数据库。如果您使用不同连接相同的数据库工作,这可能发生 -

还要注意的是,在某些情况下,发行交易可即使你与相同数据库工作全面启动。如果这是你的情况 - 避免创建多个连接,而是将相同的连接实例传递给你需要的所有方法。