Maison > développement back-end > C++ > Pourquoi mon TransactionScope passe-t-il à MSDTC sur certaines machines mais pas sur d'autres ?

Pourquoi mon TransactionScope passe-t-il à MSDTC sur certaines machines mais pas sur d'autres ?

Mary-Kate Olsen
Libérer: 2025-01-26 18:21:09
original
934 Les gens l'ont consulté

Why Does My TransactionScope Escalate to MSDTC on Some Machines But Not Others?

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 :

  • Plusieurs ressources durables dépourvues de notifications en une seule phase (exclues).
  • Connexions multiples à la même base de données (exclues par la révision du code).
  • Marshaling de transactions entre domaines ou processus inter-applications (exclu).

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal