Compartir a través de


Cómo usar la característica Transacciones manuales de COM+

Ejemplo de código

El procedimiento del siguiente ejemplo muestra cómo una clase derivada de la clase ServicedComponent puede utilizar la característica Transacciones manuales de COM+ para tener acceso al Coordinador de transacciones distribuidas (DTC). Para obtener más información acerca de cómo usar la característica Transacciones manuales en el espacio de nombres System.EnterpriseServices, vea Transacciones manuales.

Para crear un objeto que utilice la transacción de otro objeto.

  1. Defina una clase que se derive de la clase ServicedComponent y exponga una propiedad pública que devuelva el objeto de la transacción actual del DTC de COM+. Por ejemplo, en el siguiente código, la clase Base hereda la clase ServicedComponent y tiene una propiedad pública que devuelve el objeto ContextUtil.Transaction para la transacción DTC de COM+ en la que se crea la instancia del objeto.

    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. Cree dos clases que se deriven de la clase definida en el paso 1 y establezca el atributo Transaction para ambas clases. Por ejemplo, en el siguiente código se declaran dos clases CTransaction1 y CTransaction2 que se derivan de la clase Base y tienen el atributo Transaction establecido.

    <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. Cree una aplicación cliente que utilice las clases creadas en el paso 2 para probar la característica Transacciones manuales.

    1. Cree una instancia de una de las clases definidas en el paso 2. Por ejemplo, el código siguiente crea una instancia de la clase 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. Recupere la transacción DTC de COM+ actual del objeto creado en el paso 3.a. Por ejemplo, en el siguiente código se recupera el objeto Transaction de la propiedad pública Transaction de la clase CTransaction1.

      Dim tx as Object = tx1.Transaction
      
      Object tx = tx1.Transaction;
      
    3. Cree una instancia de la segunda clase definida en el paso 2 mediante el uso del objeto Transaction recuperado en el paso 3.b. Por ejemplo, en el siguiente código se crea una instancia de la clase CTransaction2 mediante el uso del objeto Transaction recuperado en el paso 3.b.

      Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
      
      CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, 
                           typeof(CTransaction2));
      
    4. Genere una clave segura y compile el ejemplo de la manera siguiente:

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

Ejemplo

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.");
      }
}

Consulte también

Referencia

System.EnterpriseServices Namespace

Conceptos

Transacciones manuales
Resumen de los servicios COM+ disponibles

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.