在WCF 4.0中,如何将3种不同的服务操作作为单个事务提交? (在SOA中提交)
我有3种不同的WCF服务,如下所示,每种服务方法都调用数据库操作
service1.CreateEmployee();
service2.SendSetupRequestForEmployee();
service3.GiveOfficePermissionToEmployee();
即使一个操作失败,整个事情也应该回滚......任何帮助都会受到赞赏。
答案 0 :(得分:5)
简短回答:在TransactionScope
下进行服务呼叫,并确保将呼叫本身设置为在交易下运行。
TLDR 阅读本文here。
基本上,您需要装饰您的操作合同方法:
[TransactionFlow(TransactionFlowOption.Allowed)]
void MyWcfServiceCall() {...}
,服务方法调用自身:
[OperationBehavior(TransactionScopeRequired = true)]
void MyWcfServiceCall() {...}
并在TransactionScope
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew)) {
myServiceClient.MyWcfServiceCall();
myOtherServiceClient.MyOtherWcfServiceCall();
tx.Complete();
}
在配置文件中绑定,将transactionFlow设置为true
:
<bindings>
<wsHttpBinding>
<binding name="MyServiceBinding" transactionFlow="true" ... />
</wsHttpBinding>
</bindings>