0

我正在測試工作流基礎4.5中的接收事務範圍,我認爲它有問題!工作流基金會和DTC事務回滾行爲不端

看到我的roolback交易或者通過明確的roolback:

using (TransactionScope s = new TransactionScope()) 
{ 
    using (ServiceReference1.ServiceClient cli = new ServiceReference1.ServiceClient()) 
    { 
     Transaction t = Transaction.Current;      
     cli.GetData(new ServiceReference1.GetData() { data = 10, ID = id }); 
     t.Rollback();           
    } 
} 

或由TransactionScope的拋出異常:

using (TransactionScope s = new TransactionScope()) 
{ 
    using (ServiceReference1.ServiceClient cli = new ServiceReference1.ServiceClient()) 
    { 
     cli.GetData(new ServiceReference1.GetData() { data = 10, ID = id }); 
     throw new Exception("Error!"); 
    } 
} 

我希望太rolledback工作流程!換句話說,我期望接收「GetData」仍然有效!但那不會發生。工作流被執行,GetData不再有效!

還有其他的「接收」了「的GetData」之後,以保證工作流不會進入「已完成」的狀態......

我敢肯定,我的交易流入了工作流程,因爲裏面工作流我有一個活動,返回我的交易ID(當然匹配的應用程序)

任何人都可以告訴發生了什麼事?我錯過了什麼?

Futher筆記:
一切都在我的機器上運行(包括後備存儲時,SQL Server 2012) DTC啓用

回答

0

工作流本身不是事務性資源。因此,儘管您已完成的任何數據庫更新可能會回滾,但工作流本身的狀態不會重置。

+0

但我的實例本身是堅持!它顯示如果我手動查詢數據庫! – Leonardo 2013-03-05 14:57:49

+0

即使AbortInstanceOnTransactionFailure = true,它是否也是相同的行爲? (TransactedReceiveScope的) – Sentinel 2013-03-05 16:04:50