【问题标题】:Oracle Transaction Rollback in WebserviceWebservice 中的 Oracle 事务回滚
【发布时间】:2012-01-11 12:37:07
【问题描述】:

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

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

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

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

对于InsertMeasures,我正在调用网络服务

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

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

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

【问题讨论】:

    标签: web-services oracle c#-2.0


    【解决方案1】:

    您需要网络服务提供商的配合。

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

    但是,提供此类交易服务存在相当大的开销和运营复杂性,这很可能是很少有人这样做的原因。我首选的解决方案是提供一个结合了 InsertQuarterly 和 InsertMeasures 功能的粗粒度服务——该实现可以非常容易地在单个服务调用中管理 Oracle 事务。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 2012-01-16
      • 1970-01-01
      • 2013-10-02
      • 2012-11-12
      • 2017-02-14
      相关资源
      最近更新 更多