跨多个服务的 WCF 事务
本文关键字:WCF 事务 服务 | 更新日期: 2023-09-27 18:34:41
>客户端应用程序在一个事务作用域中调用 2 个不同的 WCF 服务,希望在其中一个调用失败时回滚整个事务,如下所示:
using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
proxy1.UpdateThing(data);
proxy2.UpdateSomeOtherThing(data);
transaction.Complete();
}
现在,对 proxy1 的调用很好,但对 proxy2 的调用会引发异常。当我检查数据库时,对 proxy1 的调用仍然成功。
在这种情况下,我应该如何去上班?DependentTransactions是这里的方式吗?
这两个服务都托管在同一台计算机上,两者都有一个 wsHttpBinding with TransactionFlow = true。事务单独适用于每个服务,当调用同时使用两个服务时,如示例中所示,则不起作用。这两项服务都使用正确的注释进行装饰。
例外只是其中一个服务的硬抛出,用于测试这一点。
值得注意的是,这两种服务都使用 EF 将其数据处理到数据库。
若要在 WCF 中启用事务,您需要更多作为使用者中的事务范围。
若要向 WCF 服务添加事务支持,将执行以下操作:
- 向服务协定添加事务支持。这是必需的。
- 将事务支持添加到实现服务的代码中合同。这是必需的。
- 在实现代码。这是可选的。
- 在捆绑。这是必需的。
若要在客户端应用程序中启动事务,必须执行以下操作:
- 向代理类添加事务支持。
- 在绑定上启用事务。
- 使用 TransactionScope 类启动事务。
若要了解如何实现这一点,可以阅读(源(:WCF 服务中的事务