Partager via


Procédure d'utilisation de la fonctionnalité BYOT (Bring Your Own Transaction) de COM+

Exemple de code

La procédure et l'exemple suivants montrent comment une classe dérivée de la classe ServicedComponent peut utiliser la fonctionnalité BYOT de COM+ pour accéder à un Coordinateur de transactions distribuées (DTC, Distributed Transaction Coordinator). Pour plus d'informations sur l'utilisation de la fonctionnalité BYOT dans l'espace de noms System.EnterpriseServices, voir le rubrique sur BYOT (Bring Your Own Transaction).

Pour créer un objet qui utilise la transaction d'un autre objet.

  1. Définissez une classe dérivée de la classe ServicedComponent et qui expose une propriété publique qui renvoie l'objet actuel de transaction DTC COM+. Par exemple, dans le code suivant, la classe Base hérite de la classe ServicedComponent et a une propriété publique qui renvoie l'objet ContextUtil.Transaction pour la transaction DTC COM+ en cours dans laquelle l'objet est instancié.

    Imports System.EnterpriseServices
    Public Class Base 
          Inherits ServicedComponent
          Public Readonly Property Transaction() as Object
            Get
                Return ContextUtil.Transaction
            End Get
          End Property
    End Class
    
    using System.EnterpriseServices;
    public class Base : ServicedComponent
    {
        public Object Transaction 
        { 
            get { return ContextUtil.Transaction; } 
        }    
    }
    
  2. Créez deux classes qui dérivent de la classe définie à l'étape 1 et définissez l'attribut Transaction pour les deux classes. Par exemple, le code suivant permet de déclarer les deux classes CTransaction1 et CTransaction2 qui dérivent de la classe Base et pour lesquelles l'attribut Transaction est défini.

    <Transaction()> Public Class CTransaction1 
    Inherits Base
    ' Insert your transaction logic here.
    End Class
    
    <Transaction()> Public Class CTransaction2 
    Inherits Base
    ' Insert your transaction logic here.
    End Class
    
    [Transaction]
    public class CTransaction1 : Base 
    {
          // Insert your transaction logic here.
    }
    
    [Transaction]
    public class CTransaction2 : Base 
    {
          // Insert your transaction logic here.
    }
    
  3. Créez une application cliente qui utilise les classes créées à l'étape 2 pour tester la fonctionnalité BYOT.

    1. Créez une instance de l'une des classes définies à l'étape 2. Par exemple, le code suivant permet de créer une instance de la classe CTransaction1.

      Class BYOTDemonstration
          Public Shared Sub Main()
              Dim tx1 as New CTransaction1
          End Sub
      End Class
      
      class BYOTDemonstration
      {
          static void Main()
          {
              CTransaction1 tx1 = new CTransaction1();
          }
      }
      
    2. Récupérez la transaction DTC COM+ en cours de l'objet créé à l'étape 3.a. Par exemple, le code suivant permet de récupérer l'objet Transaction de la propriété publique Transaction de la classe CTransaction1.

      Dim tx as Object = tx1.Transaction
      
      Object tx = tx1.Transaction;
      
    3. Créez une instance de la deuxième classe définie à l'étape 2 en utilisant l'objet Transaction récupéré au cours de l'étape 3.b. Par exemple, le code suivant permet de créer une instance de la classe CTransaction2 en utilisant la transaction récupérée à l'étape 3.b.

      Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
      
      CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, 
                           typeof(CTransaction2));
      
    4. Générez une clé forte et compilez l'exemple de code comme suit :

      sn –k BYOTDemo.snk
      vbc /r:System.EnterpriseServices.dll BYOTDemo.vb
      
      sn –k BYOTDemo.snk
      

Exemple

Imports System
Imports System.Reflection
Imports System.EnterpriseServices

<assembly: AssemblyKeyFile("BYOTDemo.snk")>

Public Class Base 
      Inherits ServicedComponent
      Public Readonly Property Transaction() as Object
        Get
            Return ContextUtil.Transaction
        End Get
      End Property
End Class

<Transaction()> Public Class CTransaction1 
Inherits Base
' Insert your transaction logic here.
End Class

<Transaction()> Public Class CTransaction2 
Inherits Base
' Insert your transaction logic here.
End Class

Class BYOTDemonstration
      Public Shared Sub Main()
            ' Create a transactional object, and then get its
            ' transaction.
            Dim tx1 as New CTransaction1
            Console.WriteLine("Created transaction1.")
            Dim tx as Object = tx1.Transaction
            Console.WriteLine("Got the transaction of transaction1.")       
            Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
            Console.WriteLine("Created transaction2 with the _
            transaction of transaction1.")
            End Sub
End Class
using System;
using System.Reflection;
using System.EnterpriseServices;

[assembly: AssemblyKeyFileAttribute("byotdemo.snk")]

public class Base : ServicedComponent
{
    public Object Transaction 
    { 
        get { return ContextUtil.Transaction; } 
    }    
}

[Transaction]
public class CTransaction1 : Base 
{
      // Insert your transaction logic here.
}

[Transaction]
public class CTransaction2 : Base 
{
      // Insert your transaction logic here.
}

class BYOTDemonstration
{
      static void Main()
      {
            /* Create a transactional object, and then get its
                  transaction. */
              CTransaction1 tx1 = new CTransaction1();
            Console.WriteLine("Created transaction1.");
              Object tx = tx1.Transaction;
            Console.WriteLine("Got the transaction of transaction1.");        
              CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
            Console.WriteLine("Created transaction2 using the transaction of transaction1.");
      }
}

Voir aussi

Référence

System.EnterpriseServices Namespace

Concepts

BYOT (Bring Your Own Transaction)
Résumé des services COM+ disponibles

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.