Web服务中的Oracle事务回滚

时间:2012-01-11 12:37:08

标签: web-services oracle c#-2.0

我有几个事务要将表单数据插入到oracle表中。

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

如果insertmeasures过程成功执行,那么我必须调用另一个过程。 在InsertQuarterly内我调用了一个将数据插入Oracle表的Web服务方法 例如

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

InsertMeasures我正在调用webservice

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

我的问题是如果InsertQuarterly成功执行但如果InsertMeasures在事务期间失败,那么我也想回滚InsertQuarterly。 我怎样才能做到这一点?我可以将OracleTransactiontransaction.Rollback()一起使用。 但我使用不同的webservice方法进行交易。 如何在这里管理回滚和提交。

处理交易的最佳程序是什么?

1 个答案:

答案 0 :(得分:0)

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

Web服务标准允许服务提供商跨服务调用提供事务行为。根据我的经验,相对较少的服务作者确实支持事务性。如果您使用的服务提供此类功能,那么您需要了解在您的环境中使用WS-AtomicTransaction的具体细节。

然而,在提供此类交易服务时存在相当大的管理费用和操作复杂性,这可能是很少有人这样做的原因。我首选的解决方案是提供单一的粗粒度服务,结合InsertQuarterly和InsertMeasures的功能 - 然后实现可以非常轻松地管理单个服务调用中的Oracle事务。

另一种可能性是开发幂等服务(可以安全地多次调用的服务。)然后客户端有责任重复调用InsertQuarterly()和InsertMeasures(),直到两者都工作,只有安全地重复调用这些服务是幂等的。

所有这些方法都要求您的服务提供商实施一些合适的方法,您无法完全在客户端代码中解决此问题。