다음을 통해 공유


방법: COM+의 BYOT(Bring Your Own Transaction) 기능 사용

코드 예제

다음 절차와 예제에서는 ServicedComponent 클래스로부터 파생된 클래스에서 COM+의 BYOT 기능을 사용하여 DTC(Distributed Transaction Coordinator)에 액세스하는 방법을 보여 줍니다. System.EnterpriseServices 네임스페이스에서 BYOT 기능을 사용하는 방법은 BYOT(Bring Your Own Transaction)를 참조하십시오.

다른 개체의 트랜잭션을 사용하는 개체를 만들려면

  1. ServicedComponent 클래스에서 파생되는 클래스를 정의하고 현재 COM+ DTC 트랜잭션 개체를 반환하는 공개 속성을 노출합니다. 예를 들어, 다음 코드에서는 Base 클래스가 ServicedComponent 클래스를 상속하고, 개체가 인스턴스화된 현재 COM+ DTC 트랜잭션에 대한 ContextUtil.Transaction 개체를 반환하는 공개 속성을 가집니다.

    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. 1단계에서 정의한 클래스에서 파생되는 클래스 두 개를 만들고 두 클래스에 Transaction 특성을 설정합니다. 예를 들어, 다음 코드에서는 Base 클래스에서 파생된 두 개의 클래스, CTransaction1CTransaction2를 선언하고 각각의 Transaction 특성을 설정합니다.

    <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. 2단계에서 만든 클래스를 사용하는 클라이언트 응용 프로그램을 만들어 BYOT 기능을 테스트합니다.

    1. 2단계에서 정의한 클래스 중 하나의 인스턴스를 만듭니다. 예를 들어, 다음 코드에서는 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. 3.a단계에서 만든 개체에서 현재 COM+ DTC 트랜잭션을 검색합니다. 예를 들어, 다음 코드에서는 CTransaction1 클래스의 Transaction 공개 속성에서 Transaction 개체를 검색합니다.

      Dim tx as Object = tx1.Transaction
      
      Object tx = tx1.Transaction;
      
    3. 3.b단계에서 검색한 Transaction 개체를 사용하여 2단계에서 정의한 두 번째 클래스의 인스턴스를 만듭니다. 예를 들어, 다음 코드에서는 3.b단계에서 검색한 Transaction을 사용하여 CTransaction2 클래스의 인스턴스를 만듭니다.

      Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
      
      CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, 
                           typeof(CTransaction2));
      
    4. 강력한 키를 생성하고 다음과 같이 예제를 컴파일합니다.

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

예제

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

참고 항목

참조

System.EnterpriseServices Namespace

개념

BYOT (Bring Your Own Transaction)
사용 가능한 COM+ 서비스 요약

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.