使用TransactionScope和MS DTC时的常见问题

Gor*_*ord 6 .net msdtc transactionscope

我刚刚开始使用TransactionScope,我发现总会遇到意想不到的事情需要永远调试.

我认为拥有这些的综合列表对于那些"奇怪的错误"情况来说是很好的,并且还可以扩展我们对平台奇怪性的了解.

关于我将如何使用事务范围的一些上下文:

  • Web应用程序
  • 多个Web服务器,应用程序服务器和SQL服务器
  • 事务将主要是数据库事务,但有些将被提升以写入MSMQ.

sto*_*eur 3

我脑子里浮现出两件事:

  • 当您在同一范围内使用多个连接对象时,即使连接具有相同的连接字符串(这在 sql 2008 中已修复),事务也会提升。阅读此线程中的更多内容,dbconnectionscope将解决 sql 2005 上的该问题
  • msdtc 实例需要能够互相看到,并且需要正确设置其安全性 http://support.microsoft.com/kb/899191(允许入站和出站,不需要相互身份验证通常是最安全的选择)。使用 DTCPing 解决 dtc 实例之间的连接问题,如下所述:http://support.microsoft.com/kb/306843

你希望事务尽可能的轻量级,dtc引入了大量的开销。您还希望事务尽可能短,因此仅在应用程序服务器上引入它们,而不是在 Web 服务器上引入它们。使应用程序服务器和数据库之间的网络跃点尽可能小、尽可能快,通过与应用程序服务器和数据库之间不同的连接在 Web 和应用程序服务器之间发送网络流量,并使最后一个速度快得惊人,连接短得可笑。

如果您有多个应用程序服务器,您可以考虑在一台服务器上运行一个 msdtc 实例(例如在数据库上或在其中一个应用程序服务器上),并从所有应用程序服务器远程使用它,而不是每个应用程序服务器都运行自己的服务器,但是我不知道这还有什么额外的好处。