共用方式為


BYOT (使用自己的交易)

COM+ 的 BYOT 功能可讓 COM+ 元件將已經存在的 Microsoft 分散式交易協調器 (DTC) 或交易 Internet 通訊協定 (TIP) 交易設定為新元件內容的交易屬性。這麼做可讓 COM+ 元件和存留期 (Lifetime) 是由交易處理監視器、物件交易服務或資料庫管理系統控制的交易建立關聯。BYOT 也可以用來整合由 TIP 協調的交易。

注意 撰寫商務元件時慣用的程式撰寫模型為自動交易,而非 BYOT 交易。使用 BYOT 交易時必須非常小心。在某些情況下,它們可能會造成交易橫跨多個同步處理領域 (也就是說允許交易平行處理)。

BYOT 類別公開 (Expose) CreateWithTransactionCreateWithTipTransaction 這兩個方法。下列範例會說明如何建立使用其他物件交易的物件。

BYOT 示範

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

Makefile.bat

您可以依照下列方式編譯範例:

sn –k BYOTDemo.snk
vbc /r:System.EnterpriseServices.dll BYOTDemo.vb
[C#]
sn –k BYOTDemo.snk
csc BYOTDemo.cs

請參閱

可用的 COM+ 服務摘要 | System.EnterpriseServices 命名空間