共用方式為


在交易中使用非交易元件

將非交易元件放入交易中,以利用 交易的 ACID 屬性 通常很有用。 例如,如果您有用來更新網路上密碼的非交易舊版元件,您可以將這些元件放在交易中,以確保密碼更新在網路上保持一致。

交易 內容對像是一般物件 ,可讓非交易式用戶端將多個 COM 物件的工作合併成單一交易,而不需要您特別針對該目的開發新的元件。 與自動交易相反,交易內容物件需要其客戶端明確認可或中止交易。

根據預設,交易內容物件的交易屬性值會設定為 [必要]。 如果客戶端釋放交易內容物件而不明確發出認可或中止呼叫,COM+ 會中止交易。

下列 Visual Basic 範例示範非交易式用戶端如何將多個物件完成的工作撰寫成單一交易:

Dim objTxCtx As TransactionContext
Dim objCat As MyDLL.Ccat  ' Ccat is a user-defined component.
Dim objDog As MyDLL.Cdog  ' Cdog is a user-defined component.

' Get TransactionContext object.
Set objTxCtx = _
  CreateObject ("TxCtx.TransactionContext")

' Create instances of Cat and Dog.
Set objCat = _ 
  objTxCtx.CreateInstance ("MyDLL.Ccat")
Set objDog = _ 
  objTxCtx.CreateInstance ("MyDLL.Cdog")

' Both objects do work.
objDog.Bark
objCat.Hiss

' Commit the transaction.
objTxCtx.Commit

交易內容物件的限制

以下是交易內容物件的一些重要限制:

  • 使用交易內容物件時,將多個物件的工作結合成單一交易的應用程式邏輯會系結至特定的非交易客戶端實作,而使用 COM 元件的一些優點會遺失。 這些遺失的優點包括:

    • 能夠重複使用應用程式邏輯做為更大交易的一部分
    • 宣告式安全性的強制套用
    • 從客戶端遠端執行邏輯的彈性
  • 交易內容物件會使用非交易式用戶端執行同進程,這表示 COM+ 必須在非交易式用戶端電腦上使用。 例如,當交易內容物件從與 COM+ 在同一部伺服器上執行的 Active Server Pages (ASP) 頁面使用時,這可能不是問題。

  • 當您建立交易內容物件時,您不會取得非交易式用戶端的內容。 交易式工作只能透過使用交易內容物件建立的 COM 物件間接完成。 特別是,非交易式用戶端無法使用 COM+ 資源分配器(例如 ODBC),並讓工作包含在交易中。 例如,開發人員可能熟悉下列語法,以在關係資料庫系統上執行交易式工作:

    BEGIN TRANSACTION
      DoWork
    COMMIT TRANSACTION
    

    以類似的方式使用交易內容物件不會產生所需的結果:

    Set objTxCtx = CreateObject ("TxCtx.TransactionContext")
      DoWork
      objTxCtx.Commit
    Set objTxCtx = Nothing
    

    在此範例中,DoWork 的呼叫不會登記在交易中。 相反地,您必須建置呼叫 DoWork 的 COM 元件、使用交易內容物件建立該元件的物件實例,然後從非交易式用戶端呼叫該物件,讓工作成為用戶端控制交易的一部分。