我认为您给予 WCF 的功劳多于应得的功劳。 WCF 可以做一些令人惊奇的事情,但它并没有什么神奇之处。它为 Web 服务提供了一组接口,并允许您为数据提供中间访问层。
让我们来解决你的场景:
- 如果 WCF 服务在一个 SQL Server 数据库的表中执行插入并从另一个 SQL Server 数据库的表中删除(在相同或不同的服务器中)
我们在这里使用了两个 RDBMS,因此您将拥有两个事务管理器。第一个事务管理器在 RDBMS 中用于插入,第二个事务管理器用于删除。
- 如果同一个 WCF 服务在一个 SQL Server 数据库的表中执行插入并从表 oracle 数据库中删除。
同样,我们在这里使用了两个 RDBMS,因此您将拥有两个事务管理器。第一个事务管理器在 RDBMS 中用于插入,第二个事务管理器用于删除。
请注意,我们不需要关心它是哪种类型的 RDBMS,我们只需跟踪所涉及的数量。
- 如果 WCF 服务调用 2 个不同的 WCF 服务在同一个 SQL Server 基础数据库上执行操作。
这个有点棘手,因为我们不知道 2 个 WCF 服务在做什么,并且有一些不可取的巫术魔法可以用来协调 2 个服务之间的事务。我会假设你比那更聪明,并不是那个意思。
所以在这种情况下,我们有 1 个 RDBMS 执行 2 个单独的事务。我们将有来自 1 个 RDBMS 的 1 个事务管理器,但操作将在不同的事务下完成。
总结一下 - 要知道涉及多少事务管理器,您需要查看正在使用的 RDBMS 的数量。要知道需要多少事务,您需要查看执行的操作数。
请注意,使用 WCF 与您对管理器的担忧无关。 WCF 恰好是一种工具,它提供了一种通过服务访问数据的附加方式。 WCF 很酷,但它并不神奇。
补充说明
你在评论中问:
我担心的是,在所有这些情况下,它将使用哪个事务管理器 a) LTM b) KTM c) DTC?
对于 MS SQL Server 事务,处理事务的将是 LTM 或 DTC。根据这个MSDN Blog entry,在性能成为一个重要问题之前,您不一定需要担心。并且您应该避免过早的优化,以便让事情先发挥作用。
根据this description of the KTM,在您询问的任何情况下,您认为您将如何使用 KTM 都非常不清楚。
内核事务管理器 (KTM) 支持开发使用事务的应用程序。事务引擎本身在内核中,但事务可以为内核或用户模式事务开发,也可以在单个主机内或分布式主机之间开发。
另请注意,Oracle DB 的 RDBMS 有一个单独的事务管理器,它不同于 MS SQL Server 事务管理器。