我想调用Web服务在其数据库中插入记录,然后我想在其他城市的远程数据库中插入记录,如果Web服务成功完成操作的话。
这是一个简化的示例代码:
IdentificationSystem.Service Identify = new IdentificationSystem.Service();
string result= Identify.InsertWorkshopInfo(BosWorkshop.WpSvUserName, BosWorkshop.WpSvPassword,BosWorkshop.WkIcode,BosWorkshop.WpName)
if (result==0)//If success
{
Connect to a remote database and then insert a record
}
根据我的示例代码,如果通过Web服务和Web服务插入的数据返回成功但是我无法在其他城市的远程数据库中插入记录将会发生什么。 像连接松散的东西。
我该怎么办?我可以在这里使用System.transaction name space
吗?
我正在自己编写Web服务代码。
答案 0 :(得分:4)
如果两个服务器都在运行分布式事务处理协调器(MSDTC),那么可以使用分布式事务。
TransactionScope
交易将使用DTC自动升级。
但是,您应该考虑其影响:跨服务器的长时间运行事务可能并不可取。此外,还有安全和防火墙方面的考虑因素。
答案 1 :(得分:1)
处理分布式事务see this document 存在WS标准,但使用这些标准要求Web服务的作者应选择提供符合那些更高级规范的接口。这为Web服务的实现和管理增加了相当大的复杂性,因此很少有服务提供商选择这样做。
如果缺乏某种分布式交易协调,任何此类一致性的责任在于客户,即。您。实际上,你需要保持一个可靠的记录,你想要做什么(我需要在这里这个和那里),然后有一些机智来应对失败,例如在将来某个时候重试,或者如果第二个插入变得不可能则撤消第一个插入。
各种“流程编排”产品试图简化这些规则的编码,但这是一个完全难以解决的问题。举几个例子:
我一般认为您依赖于服务提供商为您提供的服务允许您“组合”您想要的多更新功能。如果你非常不走运,你想做什么可能是不可能的。然后,您可以回退到某些故障情况的手动更正。真实世界的企业实际上做了很多。人们通过电话确定发生了什么,调整订单,甚至要求取消订单。如果失败的可能性很小,那么开发防弹系统可能是一种更具成本效益的方法。