Condividi tramite


Procedura: utilizzare la funzionalità BYOT (Bring Your Own Transaction) di COM+

Esempio di codice

Nella procedura e nell'esempio riportati di seguito viene illustrato come in una classe derivata dalla classe ServicedComponent sia possibile utilizzare la funzionalità BYOT di COM+ per accedere a DTC (Distributed Transaction Coordinator). Per ulteriori informazioni sull'utilizzo della funzionalità BYOT dall'interno dello spazio dei nomi System.EnterpriseServices, vedere BYOT (Bring Your Own Transaction).

Per creare un oggetto che utilizza la transazione da un altro oggetto.

  1. Definire una classe derivata dalla classe ServicedComponent ed esporre una proprietà pubblica che restituisce l'oggetto DTC Transaction corrente di COM+. Nel codice riportato di seguito, ad esempio, la classe Base eredita la classe ServicedComponent e dispone di una proprietà pubblica che restituisce l'oggetto ContextUtil.Transaction per la transazione DTC di COM+ in cui viene creata l'istanza dell'oggetto.

    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. Creare due classi che derivano dalla classe definita nel passaggio 1 e impostare l'attributo Transaction per entrambe le classi. Ad esempio, nel codice riportato di seguito vengono dichiarate due classi CTransaction1 and CTransaction2 che derivano dalla classe Base e hanno l'attributo Transaction impostato.

    <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. Creare un'applicazione client che utilizza le classi create nel passaggio 2 per il test della funzionalità BYOT.

    1. Creare un'istanza di una delle classi definite nel passaggio 2. Il codice riportato di seguito, ad esempio, consente la creazione di un'istanza della 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. Recuperare la transazione DTC corrente di COM+ dall'oggetto creato nel passaggio 3.a. Il codice riportato di seguito, ad esempio, consente di recuperare l'oggetto Transaction dalla proprietà pubblica Transaction della classe CTransaction1.

      Dim tx as Object = tx1.Transaction
      
      Object tx = tx1.Transaction;
      
    3. Creare un'istanza della seconda classe definita nel passaggio 2, utilizzando l'oggetto Transaction recuperato nel passaggio 3.b. Il codice riportato di seguito, ad esempio, consente la creazione di un'istanza della classe CTransaction2 mediante l'oggetto Transaction recuperato nel passaggio 3.b.

      Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
      
      CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, 
                           typeof(CTransaction2));
      
    4. Generare una chiave sicura e compilare l'esempio nel modo indicato di seguito:

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

Esempio

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

Vedere anche

Riferimenti

System.EnterpriseServices Namespace

Concetti

Funzionalità BYOT (Bring Your Own Transaction)
Riepilogo dei servizi COM+ disponibili

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.