2015-04-01 62 views
2
[ServiceContract] 
public interface Iservice2 
{ 
    [OperationContract] 
    [TransactionFlow(TransactionFlowOption.Allowed)] 
    void UpdateService2(); 
} 

[ServiceContract] 
public interface Iservice1 
{ 
    [OperationContract] 
    [TransactionFlow(TransactionFlowOption.Allowed)] 
    void upload(); 

} 

客戶端代碼的2期或3階段提交的作品在WCF


using (var scope = new TransactionScope()) 
{ 
    IserviceClient client = new Iservice1Client(); 
    client.upload(); 

    Iservice2 test = new Iservice2Client(); 

    test.UpdateService2(); 

    MessageBox.Show("All is well!!!"); 

    scope.Complete(); 
} 

內部細節我想明白了2期或3期詳細了WCF提交。

我從理論上理解2階段提交的體系結構。

理解

  1. 服務1和服務2在不同的網址
  2. 託管上面做了分佈式事務

問題

  1. 當WCF配置爲PerCall,分佈式事務如何在WCF內部發生 - 確實如此它會暫時將狀態保存到會話中,以便在實際提交被調用時它可以提交?

  2. 那麼從客戶那裏直到交易完成的狀態會一直保持嗎? - 它是否保留數據庫事務的參考?

  3. 當你得到併發請求時,WCF保證2請求將有2個不同的事務並且不會將它們聚集在一起 - 如果是的話它怎麼知道它是2個不同的請求?

這個問題可能是基本的,但我期待了解上述概念,爲我的項目設計解決方案。

+0

我找到了分佈式事務如何工作的答案http://stackoverflow.com/a/494593/799329 – user799329 2015-04-07 11:20:19

回答

1

您的問題包含6個問題。我會盡量一次解決它們。

我想通過WCF詳細瞭解2階段或3階段提交。

WCF使用WS-AtomicTransaction或OleTransaction通過MSDTC編排事務,並且這兩個標準僅支持兩階段提交。

當WCF配置爲PerCall,如何在分佈式事務內部在WCF

發生你問能大概只有誰寫的WCF開發人員回答的問題。

做它暫時保存狀態會話,這樣,當實際提交被稱爲它可以承諾

類似於你描述必須在邏輯上發生,但它是如何工作的內部是一個過程不重要。那它確實工作重要。這由服務所在機器上的資源管理器進行管理。從msdn

對於分佈式事務,每臺計算機都有一個本地事務 管理器。當一個交易在多臺計算機上工作時,交易管理器通過 與其他交易管理器交互,上位或下位關係。這些關係是 只與特定交易有關。

原來是國家的會話保持從客戶端活着,直到交易完成? - 它是否保留數據庫事務的參考?

查看上述問題的答案。

當你併發請求做WCF保證2請求將有2個不同的交易並不會俱樂部在一起

它做的更好。

如果是這樣怎麼知道它是2個不同的請求?

當一個請求進來時,一個線程被調度來爲請求提供服務。如果WCF無法區分兩個不同的傳入請求,那麼我認爲微軟不會將其作爲企業級Web服務平臺發佈。

我期待理解上述概念設計一個解決方案,我的項目

也許你會更好試圖瞭解分佈式事務的窗口是如何工作的:

從臨WCF 4:實用微軟SOA實現通過Nishith帕塔克:

兩階段提交協議允許參與的所有節點分佈式事務以原子方式參與......(並且)具有 三個階段:活動階段,階段1和階段2.在活動階段,創建了 事務。上級資源經理(創建者的資源 )徵募了其他資源經理,他們在交易中變得活躍。在階段1中,創建者針對該事務發出提交命令 ,並且徵募資源管理器 對它們是否準備提交做出響應。如果管理人員準備提交 ,則交易將移至階段2,否則其將中止 。

在階段2中,上級資源管理器會將一個 持久條目寫入內部日誌,然後向 徵募資源管理器發出提交。一旦完成,上級資源管理器將開始發送提交到徵募資源管理器,並且不管任何錯誤...將繼續,直到所有 徵募資源管理器已經被髮送提交消息。然後 上級資源管理器將等待來自登記的資源管理器的提交 的確認以獲得錯誤消息,或者直到發生超時。如果所有參與資源管理器都積極響應 ,上級資源管理器將清除日誌條目 ,事務將結束。

+0

感謝您的回答湯姆。但是,我知道分佈式事務的工作原理已經過測試。但是,我的這個問題的目的是爲了更深入地理解它是如何工作的,例如2個請求在邏輯上是如何區分的等等。 – user799329 2015-04-01 23:39:01

+0

@ user799329 - 你說你想爲你的項目設計一個解決方案。我假設你對web服務和事務有要求。如果是這種情況,那麼你是否需要更深入的瞭解,因爲你還沒有決定使用WCF呢?我很想知道,一旦你發現了這些信息,你打算如何使用這些信息。謝謝 – 2015-04-02 07:44:07