2012-10-30 73 views
3

我編寫了一個程序來演示多線程DTC超時的行爲。我看到幾個例外,看似隨意。是所有這些簡單的超時,還是其中一些指示更深層次的問題(連接池交互等)?這些MS DTC異常是什麼意思?

Microsoft分佈式事務處理協調器(MS DTC)已取消分佈式事務。

分佈式事務完成。要麼在新的事務中加入這個會話,要麼在NULL事務中加入。

與當前連接關聯的交易已完成但尚未處理。事務必須在連接可用於執行SQL語句之前進行處理。

該操作對於交易狀態無效。

ExecuteReader需要一個開放且可用的Connection。連接的當前狀態已關閉。

下面的代碼的數據部分:

using (DemoDataDataContext dc1 = new DemoDataDataContext(Conn1)) 
using (DemoDataDataContext dc2 = new DemoDataDataContext(Conn2)) 
{ 
    WriteMany(dc1, 100); //generate 100 records for insert 
    WriteMany(dc2, 100000); //generate 100,000 records for insert 

    Console.WriteLine("{0} : {1}", Name, " generated records for insert."); 
    using (TransactionScope ts = new TransactionScope()) 
    { 
    dc1.SubmitChanges(); 
    dc2.SubmitChanges(); 
    ts.Complete(); 
    } 
} 
+0

這聽起來像你泄漏連接(開放,但從來沒有關閉「東西」)。這肯定是「壞」;)但我不知道你應該*做什麼來修復它:( – paulsm4

+0

Conn1和Conn2是字符串,WriteMany通過InsertOnSubmit添加記錄...記錄與任何東西都沒有關係。有足夠的數據,我期望超時。異常確實發生在超時的預期時間。 –

+0

這種模式的datacontext創建和transactionscope使用是我問了這裏:http://stackoverflow.com/questions/11693811/ AM-I-使用-的TransactionScope和-的DataContext,正確 –

回答