2012-01-11 78 views
0

我有幾個事務將表單數據插入到oracle表中。Web服務中的Oracle事務回滾

if (InsertQuarterly() == true) 
      { 
       InsertMeasures(); 
      } 

如果insertmeasures過程執行成功,那麼我必須調用另一個過程。 在InsertQuarterly我打電話web服務方法將數據插入到Oracle表 爲如

sOUT = ws_service.InsertQuarterly(txtQ2dTarget.Text, txtQ3dTarget.Text) 

InsertMeasures我打電話web服務

sOUT = ws_service.InsertMeasures(txtachieveGold.Text, txtachieveDia.Text) 

我的問題是,如果InsertQuarterly成功執行,但如果InsertMeasures失敗在交易期間,我還想回滾InsertQuarterly。 我該如何做到這一點?我可以使用OracleTransactiontransaction.Rollback()。 但我正在使用不同的webservice方法進行交易。 如何管理回滾並在此處提交。

什麼是處理交易的最佳程序?

回答

0

您需要Web服務提供商的合作。

Web服務標準確實允許服務提供者跨服務調用提供事務行爲。根據我的經驗,相對較少的服務作者確實支持事務性。如果您使用的服務提供了此類功能,那麼您需要詳細瞭解在您的環境中使用WS-AtomicTransaction的具體細節。

但是,提供這種交易服務存在相當大的管理費用和操作複雜性,這可能是很少有人這樣做的原因。我的首選解決方案是提供一個結合了InsertQuarterly和InsertMeasures功能的粗粒度服務 - 這樣實現可以非常方便地在單個服務調用中管理Oracle事務。

另一種可能性是開發冪等服務(可安全地多次調用的服務)。然後,客戶端負責重複調用InsertQuarterly()和InsertMeasures(),直到兩者都能正常工作,才能安全地重複調用如果服務是冪等的。

所有這些方法都需要您的服務提供商實現一些合適的方法,你可以不純粹是在客戶端代碼解決這個問題。