TransactionScope : incohérences d'escalade MSDTC sur les machines
Notre projet utilise TransactionScope pour un accès fiable aux données, mais nous avons rencontré un comportement incohérent. Certains développeurs travaillent de manière transparente sans MSDTC, tandis que d'autres reçoivent l'erreur « MSDTC sur [SERVEUR] n'est pas disponible ». Cette enquête explore pourquoi TransactionScope passe à MSDTC sur certaines machines mais pas sur d'autres.
TransactionScope évite idéalement MSDTC sur les machines clientes. Cependant, plusieurs scénarios peuvent déclencher une escalade du DTC :
Cependant, le code contient des ouvertures de connexion imbriquées, contredisant l'affirmation d'une seule connexion ouverte. Cette connexion imbriquée est un suspect sérieux pour le problème d'escalade sur les machines concernées.
La version de SQL Server joue un rôle crucial. SQL Server 2008 a amélioré la gestion des transactions, permettant plusieurs connexions au sein d'un TransactionScope (ouvert à des moments différents) sans escalade. Cependant, SQL Server 2005 ne dispose pas de cette capacité et passe au DTC avec une deuxième connexion.
Il est essentiel que les développeurs sans problèmes d'escalade utilisent SQL Server 2008, tandis que ceux qui rencontrent des erreurs utilisent SQL Server 2005. Cela confirme la corrélation suspectée entre la version de SQL Server et l'escalade MSDTC.
Pour SQL Server 2005, une seule connexion globale de longue durée est nécessaire pour que TransactionScope fonctionne correctement. Cela est en conflit avec les meilleures pratiques (ouvrir les connexions uniquement en cas de besoin et les fermer rapidement). L'utilisation de TransactionScope avec SQL Server 2005 peut ne pas être optimale à moins que la surcharge de performances d'une connexion persistante ne soit acceptable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!