2011-10-07 78 views
4

在服務我目前正在開發我需要提供兩方面的操作:回滾先前提交的事務

  1. (使用Register()法)由應在數據庫中註冊的請求;和
  2. 該請求應發送到外部web服務進一步處理(使用Dispatch()方法)。

考慮到我無法切換操作的順序,我希望能夠「回滾」第一個,如果第二個出現問題,這樣一個無效的記錄不會得到插入到BD中。這裏的問題是,我正在提交Register方法中的交易。如果出現任何問題,我是否可以通過Dispatch方法將它從內部滾回?

編輯:所有事務正在從.NET端進行管理。

+2

您需要[兩階段提交](http://en.wikipedia.org/wiki/Two-phase_commit_protocol)。這基本上是[MSDTC](http://technet.microsoft.com/nl-nl/library/cc759136%28WS.10%29.aspx)所做的,這是你最好的選擇:使用分佈式事務協調器。但我認爲重新考慮完整的交易策略會更好。嘗試以不需要分佈式atomicy的方式設計系統。 – Steven

回答

2

在這種情況下數據庫不會幫助你。您必須創建補償性交易,並使用相互撤銷的操作對。您的服務將不得不取代所有進入關係數據庫管理事務的工作和邏輯。

+0

謝謝!但是,我忘了提及所有事務都是從.NET端進行管理的。 – DotNetStudent

+1

不會改變我的答案 - 你必須全部做完。 – duffymo