多个服务上的WCF事务

时间:2016-02-15 10:30:50

标签: c# wcf transactions transactionscope

客户端应用程序在一个TransactionScope中调用2个不同的WCF服务,希望在其中一个调用失败时回滚整个事务:

using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{

     proxy1.UpdateThing(data);
     proxy2.UpdateSomeOtherThing(data);

     transaction.Complete();
}

现在,对proxy1的调用很好,但是对proxy2的调用会引发异常。 当我检查数据库时,对proxy1的调用仍然成功。

我应该如何在这种情况下工作? DependentTransactions是走这里的方式吗?

两个服务都托管在同一台机器上,两者都有一个带有TransactionFlow = true的wsHttpBinding。该交易适用于每个服务,当呼叫使用两个服务时(如示例中)不起作用。 这两项服务都使用正确的注释进行修饰。

这个例外只是其中一项服务的一个例子,用于测试。

值得注意的是,两家服务都使用EF将数据处理到数据库。

1 个答案:

答案 0 :(得分:2)

要在WCF中启用事务,您需要更多作为消费者中的事务范围。

要向WCF服务添加事务支持,您将执行以下操作:

  • 为服务合同添加交易支持。这是必需的。
  • 向实现服务的代码添加事务支持 合同。这是必需的。
  • 配置中的事务 实施代码。这是可选的。
  • 启用交易 捆绑。这是必需的。

要在客户端应用程序中启动事务,您必须执行以下操作:

  • 向代理类添加事务支持。
  • 启用绑定上的事务。
  • 使用TransactionScope类启动事务。

要阅读如何实现这一点,您可以阅读(来源):Transactions in WCF Services