【发布时间】:2016-02-15 10:30:50
【问题描述】:
客户端应用程序在一个 TransactionScope 中调用 2 个不同的 WCF 服务,希望在其中一个调用失败时回滚整个事务:
using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
proxy1.UpdateThing(data);
proxy2.UpdateSomeOtherThing(data);
transaction.Complete();
}
现在,对 proxy1 的调用很好,但是对 proxy2 的调用会引发异常。 当我检查数据库时,对 proxy1 的调用仍然成功。
在这种情况下我应该如何去上班? DependentTransactions 是要走的路吗?
两个服务都托管在同一台机器上,都有一个 wsHttpBinding 且 TransactionFlow = true。该事务对每个服务都是孤立的,当调用同时使用这两个服务时,就像在示例中一样,它不起作用。 两种服务都使用正确的注释进行装饰。
异常只是其中一项服务的硬抛出,用于测试。
值得注意的是,这两个服务都使用 EF 将其数据处理到数据库中。
【问题讨论】:
-
proxy1 端点和/或操作是否能够处理事务?如果 proxy1 和 proxy2 的服务在你的控制之下,可以查看这篇文章来启用分布式事务:c-sharpcorner.com/UploadFile/81a718/…
-
是的,接口上都有TransactionFlow,相关方法上都设置了TransactionScopeRequired。
-
您使用什么绑定?一些绑定不支持事务。
-
wsHttpBinding。孤立地,事务行为适用于两种服务。只是当我开始跨越服务边界时,它并没有成功。
-
这只是在代码中进行测试。
标签: c# wcf transactions transactionscope