2012-01-11 77 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(),直到两者都能正常工作,才能安全地重复调用如果服务是幂等的。

所有这些方法都需要您的服务提供商实现一些合适的方法,你可以不纯粹是在客户端代码解决这个问题。