Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Windows héberge un ensemble de services et de modules qui constituent ensemble un gestionnaire de transactions. L’escalade de la gestion des transactions décrit le processus de migration d’une transaction d’un des composants du gestionnaire de transactions vers un autre.
System.Transactions inclut un composant de gestionnaire de transactions qui coordonne une transaction impliquant au maximum une ressource durable ou plusieurs ressources volatiles. Étant donné que le gestionnaire de transactions utilise uniquement des appels de domaine intra-application, il génère les meilleures performances. Les développeurs n’ont pas besoin d’interagir directement avec le gestionnaire de transactions. Au lieu de cela, une infrastructure commune qui définit des interfaces, un comportement commun et des classes d’assistance est fournie par l’espace System.Transactions de noms.
Lorsque vous souhaitez fournir la transaction à un objet dans un autre domaine d’application (y compris entre les limites de processus et de machine) sur le même ordinateur, l’infrastructure System.Transactions escalade automatiquement la transaction pour être gérée par Microsoft Distributed Transaction Coordinator (MSDTC). L'escalade se produit également si vous inscrivez un autre gestionnaire de ressources persistant. Une fois remontée, la transaction reste managée à son état élevé jusqu'à ce qu'elle soit terminée.
Entre la transaction System.Transactions et la transaction MSDTC, il existe un type intermédiaire de transaction disponible via la PSPE (Promotable Single Phase Enlistment). PSPE est un autre mécanisme important dans System.Transactions pour l'optimisation des performances. Il permet à une ressource durable distante, située dans un domaine d'application, un processus ou un ordinateur différent, de participer à une transaction System.Transactions sans la faire remonter vers une transaction MSDTC. Pour plus d’informations sur PSPE, consultez Inscription de ressources en tant que participants à une transaction.
Comment l’escalade est lancée
L’escalade des transactions réduit les performances, car msDTC réside dans un processus distinct et l’escalade d’une transaction vers le MSDTC entraîne l’envoi de messages au sein du processus. Pour améliorer les performances, vous devez retarder ou éviter l’escalade vers MSDTC ; ainsi, vous devez savoir comment et quand l’escalade est lancée.
Tant que l’infrastructure System.Transactions gère les ressources volatiles et au plus une ressource durable qui prend en charge les notifications monophases, la transaction reste dans la propriété de l’infrastructure System.Transactions . Le gestionnaire de transactions se sert uniquement de ces ressources qui vivent dans le même domaine d’application et pour lesquelles la journalisation (écriture du résultat de la transaction sur disque) n’est pas nécessaire. Une remontée qui provoque le transfert de la propriété de la transaction vers le MSDTC par l'infrastructure System.Transactions se produit :
Au moins une ressource durable qui ne prend pas en charge les notifications monophases est inscrite dans la transaction.
Au moins deux ressources durables qui prennent en charge les notifications monophases sont inscrites dans la transaction. Par exemple, l’inscription d’une seule connexion avec SQL Server 2005 n’entraîne pas la promotion d’une transaction. Toutefois, chaque fois que vous ouvrez une deuxième connexion à une base de données SQL Server 2005, ce qui entraîne l'inscription de la base de données dans la transaction, l'infrastructure System.Transactions détecte qu'il s'agit de la deuxième ressource durable dans la transaction et l'élève à une transaction MSDTC.
Demande de transférer la transaction vers un domaine d'application différent ou un autre processus est invoquée. Par exemple, la sérialisation de l’objet transactionnel sur une limite de domaine d’application. L’objet transaction est marshalé par valeur, ce qui signifie que chaque tentative de passage au-delà d’une limite de domaine d’application (même au sein d’un même processus) entraîne la sérialisation de l’objet transaction. Vous pouvez transmettre les objets de transaction en effectuant un appel sur une méthode distante qui prend un Transaction paramètre ou vous pouvez essayer d’accéder à un composant transactionnel distant. Cela sérialise l’objet transactionnel et génère une escalade, comme lorsqu’une transaction est sérialisée dans un domaine d’application. Il est distribué et le gestionnaire de transactions local devient inadapté.
Le tableau suivant répertorie toutes les exceptions possibles qui peuvent être levées pendant l’escalade.
Type d’exception | État |
---|---|
InvalidOperationException | Tentative d’escalade d’une transaction avec un niveau d’isolation égal à Snapshot. |
TransactionAbortedException | Le gestionnaire de transactions est en panne. |
TransactionException | L’escalade échoue et l’application est abandonnée. |