我正在查看WCF服务中存在的事务,但是要寻求更多的澄清。我不确定哪个事务管理器WCF将用于以下场景:
如果WCF服务在一个SQL Server数据库的表中执行insert并从另一个SQL Server数据库的表中删除(在相同或不同的服务器中)
如果同一个WCF服务在一个SQL Server数据库的表中执行insert并从表oracle数据库中删除。
如果WCF服务调用2个不同的WCF服务在同一SQL服务器基础数据库上执行操作。
请帮助我对这种情况有所了解。
答案 0 :(得分:2)
我认为你给予WCF更多的信用额度。 WCF可以做一些惊人的事情,但没有什么神奇之处。它为Web服务提供了一组接口,允许您为数据提供中间访问层。
让我们来解决你的情景:
- 如果WCF服务在一个SQL Server数据库的表中执行insert并从另一个SQL Server数据库的表中删除(在相同或不同的服务器中)
醇>
我们在这里使用了两个RDBMS,因此您将拥有两个事务管理器。第一个事务管理器在插入的RDBMS中,第二个事务管理器用于删除。
- 如果同一个WCF服务正在一个SQL Server数据库的表中执行insert并从表oracle数据库中删除。
醇>
同样,我们在这里使用了两个RDBMS,因此您将拥有两个事务管理器。第一个事务管理器在插入的RDBMS中,第二个事务管理器用于删除。
请注意,我们不需要关心它是哪种类型的RDBMS,我们只是跟踪所涉及的数量。
- 如果WCF服务调用2个不同的WCF服务,则在同一SQL服务器基础数据库上执行操作。
醇>
这个有点棘手,因为我们不知道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事务管理器不同。