客户端应用程序在一个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将数据处理到数据库。
答案 0 :(得分:2)
要在WCF中启用事务,您需要更多作为消费者中的事务范围。
要向WCF服务添加事务支持,您将执行以下操作:
要在客户端应用程序中启动事务,您必须执行以下操作:
要阅读如何实现这一点,您可以阅读(来源):Transactions in WCF Services