2016-04-29 44 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中一個事務範圍內的工作,但你並不真的需要做到這一點 - 只要將代碼從數據庫中的外事務範圍選擇數據庫。如果您使用不同連接相同的數據庫工作,這可能發生 -

還要注意的是,在某些情況下,發行交易可即使你與相同數據庫工作全面啓動。如果這是你的情況 - 避免創建多個連接,而是將相同的連接實例傳遞給你需要的所有方法。