Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services Webservice中的Oracle事务回滚_Web Services_Oracle_C# 2.0 - Fatal编程技术网

Web services Webservice中的Oracle事务回滚

Web services Webservice中的Oracle事务回滚,web-services,oracle,c#-2.0,Web Services,Oracle,C# 2.0,我有几个事务要将表单数据插入到oracle表中 if (InsertQuarterly() == true) { InsertMeasures(); } 如果insertmeasures过程成功执行,那么我必须调用另一个过程。 在InsertQuarterly中,我调用一个webservice方法将数据插入到Oracle表中 例如 对于InsertMeasures我正在调用webservice sOUT = ws_

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

if (InsertQuarterly() == true)
            {
                InsertMeasures();
            }
如果
insertmeasures
过程成功执行,那么我必须调用另一个过程。 在
InsertQuarterly
中,我调用一个webservice方法将数据插入到Oracle表中 例如

对于
InsertMeasures
我正在调用webservice

sOUT = ws_service.InsertMeasures(txtachieveGold.Text, txtachieveDia.Text)
我的问题是,如果
InsertQuarterly
成功执行,但如果
InsertMeasures
在事务期间失败,那么我还想回滚
InsertQuarterly
。 我怎样才能做到这一点?我可以将
OracleTransaction
transaction.Rollback()
一起使用。 但是我对事务使用不同的webservice方法。 如何在此处管理回滚和提交


处理事务的最佳程序是什么?

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

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

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

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

所有这些方法都需要您的服务提供商实现一些合适的方法,您不能仅在客户端代码中解决这个问题

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