我想在一个原子事务中包装一个WCF外部Web服务调用和一个本地数据库调用(nhibernate)。
这甚至可能吗?
目前我正在做以下事情:
但如果提交失败会发生什么?
答案 0 :(得分:0)
我假设外部网络服务你的意思是一种在公共网络上公开的服务。
如果外部服务支持WS-Atomic Transaction,那么可以将本地事务传播到服务。
然而,这种方法是否明智是值得怀疑的,除非外部服务也是wsHttpBinding的wcf。
如果外部服务是非wcf,那么整合可能会有相当大的痛苦;虽然WS-AT是为互操作性而设计的,但实际上几乎可以肯定的是,不同供应商如何解释协议,这可能导致客户端和服务实际上不可互操作。
但如果提交失败会怎样?
作为替代解决方案,我会考虑针对此问题的compensatory模式。举个例子:
这里的好处是可以在一个地方提供系统一致性。但是,您的问题现在变成了如何判断呼叫是否成功。
不幸的是,当您拨打服务电话时,呼叫总是可以返回失败但实际上是成功的。一个很好的例子就是服务超时。
如果你打电话失败,你怎么知道?唯一的方法是对远程资源执行查找,以确定系统状态是否包含更新。