我有几个事务要将表单数据插入到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
。
我怎样才能做到这一点?我可以将OracleTransaction
与transaction.Rollback()
一起使用。
但我使用不同的webservice方法进行交易。
如何在这里管理回滚和提交。
处理交易的最佳程序是什么?
答案 0 :(得分:0)
您需要Web服务提供商的合作。
Web服务标准允许服务提供商跨服务调用提供事务行为。根据我的经验,相对较少的服务作者确实支持事务性。如果您使用的服务提供此类功能,那么您需要了解在您的环境中使用WS-AtomicTransaction的具体细节。
然而,在提供此类交易服务时存在相当大的管理费用和操作复杂性,这可能是很少有人这样做的原因。我首选的解决方案是提供单一的粗粒度服务,结合InsertQuarterly和InsertMeasures的功能 - 然后实现可以非常轻松地管理单个服务调用中的Oracle事务。
另一种可能性是开发幂等服务(可以安全地多次调用的服务。)然后客户端有责任重复调用InsertQuarterly()和InsertMeasures(),直到两者都工作,只有安全地重复调用这些服务是幂等的。
所有这些方法都要求您的服务提供商实施一些合适的方法,您无法完全在客户端代码中解决此问题。