クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2005
Visual Studio ドキュメント
.NET Framework の拡張開発
 方法 : COM+ の BYOT (Bring Your Own Tr...

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2005/.NET Framework 2.0

その他のバージョンについては、以下の情報を参照してください。
.NET Framework 開発者ガイド
方法 : 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 オブジェクトを返すパブリップ プロパティがあります。

    Visual Basic
    Imports System.EnterpriseServices
    Public Class Base 
          Inherits ServicedComponent
          Public Readonly Property Transaction() as Object
            Get
                Return ContextUtil.Transaction
            End Get
          End Property
    End Class
    

    C#
    using System.EnterpriseServices;
    public class Base : ServicedComponent
    {
        public Object Transaction 
        { 
            get { return ContextUtil.Transaction; } 
        }    
    }
    
  2. 手順 1 で定義されたクラスから派生する 2 つのクラスを作成し、両方のクラスに Transaction 属性を設定します。たとえば、次のコードは、Base クラスから派生する CTransaction1CTransaction2 の 2 つのクラスを宣言し、Transaction 属性を設定します。

    Visual Basic
    <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
    

    C#
    [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 で定義したクラスの 1 つのインスタンスを作成します。たとえば、次のコードは、CTransaction1 クラスのインスタンスを作成します。

      Visual Basic
      Class BYOTDemonstration
          Public Shared Sub Main()
              Dim tx1 as New CTransaction1
          End Sub
      End Class
      

      C#
      class BYOTDemonstration
      {
          static void Main()
          {
              CTransaction1 tx1 = new CTransaction1();
          }
      }
      
    2. 現在の COM+ DTC トランザクションを、手順 3.a で作成されたオブジェクトから取得します。たとえば、次のコードは、Transaction オブジェクトを、CTransaction1 クラスのパブリック プロパティである Transaction から取得します。

      Visual Basic
      Dim tx as Object = tx1.Transaction
      

      C#
      Object tx = tx1.Transaction;
      
    3. 手順 3.b で取得した Transaction オブジェクトを使用して、手順 2 で定義した 2 番目のクラスのインスタンスを作成します。たとえば、次のコードは、手順 3.b で取得した Transaction を使用して CTransaction2 クラスのインスタンスを作成します。

      Visual Basic
      Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
      

      C#
      CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, 
                           typeof(CTransaction2));
      
    4. 強力なキーを生成して次の例をコンパイルします。

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

      C#
      sn –k BYOTDemo.snk
      

使用例

Visual Basic
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
C#
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.");
      }
}

参照

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker