【问题标题】:Which transaction manager will be used in WCF?WCF 中将使用哪个事务管理器?
【发布时间】:2014-11-16 05:22:18
【问题描述】:

我正在查看 WCF 服务中存在的交易,但希望对此进行更多说明。我不确定 WCF 将在以下场景中使用哪个事务管理器:

  1. 如果 WCF 服务在一个 SQL Server 数据库的表中执行插入,并从另一个 SQL Server 数据库的表中删除(在相同或不同的服务器上)

  2. 如果同一个 WCF 服务在一个 SQL Server 数据库的表中执行插入并从表 oracle 数据库中删除。

  3. 如果 WCF 服务调用 2 个不同的 WCF 服务在同一个 SQL Server 基础数据库上执行操作。

请帮助我对这种情况有所了解。

【问题讨论】:

    标签: c# wcf transactions


    【解决方案1】:

    我认为您给予 WCF 的功劳多于应得的功劳。 WCF 可以做一些令人惊奇的事情,但它并没有什么神奇之处。它为 Web 服务提供了一组接口,并允许您为数据提供中间访问层。

    让我们来解决你的场景:

    1. 如果 WCF 服务在一个 SQL Server 数据库的表中执行插入并从另一个 SQL Server 数据库的表中删除(在相同或不同的服务器中)

    我们在这里使用了两个 RDBMS,因此您将拥有两个事务管理器。第一个事务管理器在 RDBMS 中用于插入,第二个事务管理器用于删除。

    1. 如果同一个 WCF 服务在一个 SQL Server 数据库的表中执行插入并从表 oracle 数据库中删除。

    同样,我们在这里使用了两个 RDBMS,因此您将拥有两个事务管理器。第一个事务管理器在 RDBMS 中用于插入,第二个事务管理器用于删除。

    请注意,我们不需要关心它是哪种类型的 RDBMS,我们只需跟踪所涉及的数量。

    1. 如果 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 事务管理器。

    【讨论】:

    • 感谢您的回复,但我担心的是,在所有这些情况下,它将使用哪个事务管理器 a) LTM b) KTM c) DTC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多