Maison > développement back-end > C++ > Pourquoi TransactionScope dégénère-t-il à MSDTC sur certaines machines mais pas dans d'autres?

Pourquoi TransactionScope dégénère-t-il à MSDTC sur certaines machines mais pas dans d'autres?

Linda Hamilton
Libérer: 2025-01-26 18:16:12
original
333 Les gens l'ont consulté

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

TransactionScope et msdtc: comportement incohérent sur les machines

Problème:

Une application .NET en utilisant TransactionScope présente un comportement incohérent concernant l'escalade de MSDTC. Sur certaines machines de développeur, la transaction s'intensifie automatiquement au coordinateur de transaction distribué Microsoft (MSDTC), nécessitant l'activation de MSDTC. Sur d'autres, le même code fonctionne correctement sans msdtc.

Contexte:

  • TransactionScope gère l'accès aux données dans une transaction.
  • L'activation MSDTC est nécessaire sur certaines machines pour éviter les erreurs.
  • Le problème se pose lors de l'utilisation de deux connexions de base de données dans un seul TransactionScope. La deuxième tentative de connexion déclenche l'escalade MSDTC sur les systèmes affectés.

Investigation:

Les hypothèses initiales sur les écarts de version SQL Server (2005 contre 2008) se sont révélées incorrectes. La cause profonde réside dans les limites de SQL Server 2005: elle ne prend pas en charge plusieurs connexions dans un seul TransactionScope, quelle que soit leur séquence d'ouverture. Tenter une deuxième connexion oblige l'escalade. SQL Server 2008, inversement, permet à plusieurs connexions dans un TransactionScope, à condition qu'ils ne soient pas simultanément ouverts. La fermeture et la réouverture prématurées de la connexion, potentiellement grâce à la mise en commun des connexions et aux couches d'accès aux données (comme SqlTableAdapter), peuvent également déclencher l'escalade dans SQL Server 2005.

Résolution:

Pour SQL Server 2005, la maintenance d'une connexion ouverte unique à l'échelle mondiale tout au long de la transaction empêche l'escalade MSDTC. Cependant, cela s'écarte des meilleures pratiques préconisant une gestion efficace des connexions (ouverture et fermeture au besoin). La mise à niveau vers SQL Server 2008 ou version ultérieure est la solution recommandée pour éviter cette limitation et maintenir les meilleures pratiques.

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