WCF 4.0 SOA提交为事务

时间:2010-11-10 17:33:12

标签: c# .net wcf .net-3.5 soa

在WCF 4.0中,如何将3种不同的服务操作作为单个事务提交? (在SOA中提交)

我有3种不同的WCF服务,如下所示,每种服务方法都调用数据库操作

service1.CreateEmployee();

service2.SendSetupRequestForEmployee();

service3.GiveOfficePermissionToEmployee();

即使一个操作失败,整个事情也应该回滚......任何帮助都会受到赞赏。

1 个答案:

答案 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>