哪个事务管理器将在WCF中使用?

时间:2014-11-16 05:22:18

标签: c# wcf transactions

我正在查看WCF服务中存在的事务,但是要寻求更多的澄清。我不确定哪个事务管理器WCF将用于以下场景:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我认为你给予WCF更多的信用额度。 WCF可以做一些惊人的事情,但没有什么神奇之处。它为Web服务提供了一组接口,允许您为数据提供中间访问层。

让我们来解决你的情景:

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

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

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

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

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

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

这个有点棘手,因为我们不知道2个WCF服务正在做什么,并且 一些不可取的巫毒魔法可以用来协调两个服务之间的交易。我会假设你比那更聪明,并不是那种情况。

所以在这种情况下,我们有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事务管理器不同。