我編寫了一個程序來演示多線程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();
}
}
這聽起來像你泄漏連接(開放,但從來沒有關閉「東西」)。這肯定是「壞」;)但我不知道你應該*做什麼來修復它:( – paulsm4
Conn1和Conn2是字符串,WriteMany通過InsertOnSubmit添加記錄...記錄與任何東西都沒有關係。有足夠的數據,我期望超時。異常確實發生在超時的預期時間。 –
這種模式的datacontext創建和transactionscope使用是我問了這裏:http://stackoverflow.com/questions/11693811/ AM-I-使用-的TransactionScope和-的DataContext,正確 –