2010-08-06 52 views
1

在我的項目中,我使用Ado.Net的DbTransaction對象來管理事務...然後爲什麼我得到MSDTC相關的錯誤 - 「與基礎事務管理器通信失敗」 。沒有MSDTC - 仍然「與基礎事務管理器通信失敗」

這是我的代碼。

DbTransaction trans = Connection.BeginTransaction(); 

//Code 

if (successfull) 
{ 
    trans.Commit(); 
} 
else 
{ 
    trans.RollBack(); 
} 
+0

您確實需要msdtc嗎?您在一次交易中與多少個數據庫服務器進行交互? – Pandincus 2010-08-06 05:33:03

回答

1

不幸的是,MSDTC真的可以成爲一個熊。然而,一旦你有了它,它會非常漂亮。問題只是因爲每個人的網絡設置稍有不同。

聽起來像您的MSDTC服務可能不會在您的客戶機或服務器上啓用。

這裏有一個指南,使其能夠在Windows 7: - >http://www.thereforesystems.com/turn-on-msdtc-windows-7/

您還需要啓用您的數據庫服務器上: - >http://support.microsoft.com/kb/817064

一個簡單的方法來測試它是否工作無需聯繫您的服務器管理員就可以在開發箱上設置兩個不同的本地數據庫。然後嘗試在兩個數據庫連接之間維護事務。假設你正確配置了msdtc,一切都應該正常工作。

的最後一點是,你可以考慮讓你的生活通過引用System.Transactions的庫,並使用你這樣的交易代碼稍微容易一些:

using (TransactionScope scope = new TransactionScope()) 
{ 
    /* Perform transactional work here */ 
    SomeMethod(); 
    scope.Complete(); 
} 

注意,沒有明確的回退是必需的。如果在using語句內發生任何崩潰,或者在擊中.Complete()之前退出using語句,則您的事務將回滾。有關TransactionScope的更多信息,請參見: - >http://msdn.microsoft.com/en-us/library/ms172152(VS.90).aspx