Verfahrensweise: Verwenden des BYOT-Features (Bring Your Own Transaction) von COM+

Codebeispiel

Das folgende Verfahren und Beispiel zeigen, wie eine von der ServicedComponent-Klasse abgeleitete Klasse mit dem BYOT-Feature von COM+ auf einen Distributed Transaction Coordinator (DTC) zugreifen kann. Weitere Informationen zur Verwendung des BYOT-Features innerhalb des System.EnterpriseServices-Namespace finden Sie unter BYOT (Bring Your Own Transaction).

So erstellen Sie ein Objekt, das die Transaktion aus einem anderen Objekt verwendet

  1. Definieren Sie eine Klasse, die von der ServicedComponent-Klasse abgeleitet wird und eine öffentliche Eigenschaft verfügbar macht, die das aktuelle COM+ DTC-Transaktionsobjekt zurückgibt. Im folgenden Code beispielsweise erbt die Base-Klasse die ServicedComponent-Klasse und verfügt über eine öffentliche Eigenschaft, die das ContextUtil.Transaction-Objekt für die aktuelle COM+ DTC-Transaktion zurückgibt, in der das Objekt instanziiert wird.

    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. Erstellen Sie zwei Klassen, die von der in Schritt 1 definierten Klasse abgeleitet werden, und legen Sie das Transaction-Attribut für beide Klassen fest. Im folgenden Code werden beispielsweise die zwei Klassen CTransaction1 und CTransaction2 deklariert, die von der Base-Klasse abgeleitet werden und für die das Transaction-Attribut festgelegt ist.

    <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. Erstellen Sie eine Clientanwendung, die mit den in Schritt 2 erstellten Klassen das BYOT-Feature testet.

    1. Erstellen Sie eine Instanz von einer der in Schritt 2 definierten Klassen. Im folgenden Code wird beispielsweise eine Instanz der CTransaction1-Klasse erstellt.

      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. Rufen Sie die aktuelle COM+ DTC-Transaktion aus dem in Schritt 3.a erstellten Objekt ab. Im folgenden Code wird beispielsweise das Transaktionsobjekt aus der öffentlichen Eigenschaft Transaction der CTransaction1-Klasse abgerufen.

      Dim tx as Object = tx1.Transaction
      
      Object tx = tx1.Transaction;
      
    3. Erstellen Sie eine Instanz de zweiten in Schritt 2 definierten Klasse, indem Sie das in Schritt 3.b abgerufene Transaktionsobjekt verwenden. Im folgenden Code wird beispielsweise unter Verwendung der in Schritt 3b abgerufenen Transaktion eine Instanz der CTransaction2-Klasse erstellt.

      Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
      
      CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, 
                           typeof(CTransaction2));
      
    4. Generieren Sie einen starken Schlüssel, und kompilieren Sie das Beispiel wie folgt:

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

Beispiel

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

Siehe auch

Referenz

System.EnterpriseServices Namespace

Konzepte

BYOT (Bring Your Own Transaction)
Zusammenfassung der verfügbaren COM+-Dienste

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.