與 Enterprise Services 和 COM+ 交易的互通性

System.Transactions 命名空間支援以此命名空間建立的交易物件,以及透過 COM+ 建立的交易兩者之間的互通性。

當您想要建立新的 EnterpriseServicesInteropOption 執行個體來指定與 COM+ 的互通性等級時,就可以使用 TransactionScope 列舉型別 (Enumeration)。

根據預設,當您的應用程式碼檢查靜態 Current 屬性時,System.Transactions 會嘗試尋找在某些方面為最新狀態的交易,或是尋找指出 CurrentnullTransactionScope 物件。 如果程式碼找不到當中任何一個,則 System.Transactions 會查詢 COM+ 內容,看看是否有交易。 請注意,就算 System.Transactions 在 COM+ 內容中找到了交易項目,仍舊偏好 System.Transactions 的原生交易。

互通性等級

EnterpriseServicesInteropOption 列舉型別會定義下列互通性等級 - NoneFullAutomatic

TransactionScope 類別會提供可將 EnterpriseServicesInteropOption 接受為參數的建構函式。

None 如名稱所示,表示 System.EnterpriseServices 內容與交易範圍之間沒有互通性。 在使用 TransactionScope 建立了 None 之後,任何對 Current 所做的變更都不會反映在 COM+ 內容中。 同理,對 COM+ 內容中的交易所做的變更,也不會反映在 Current 中。 對於 System.Transactions 來說,這種作業模式是最快速的,因為不需要額外的同步處理。 None 預設會採用 TransactionScope 值,而且所有的建構函式也不接受 EnterpriseServicesInteropOption 做為參數。

如果您希望將 System.EnterpriseServices 交易與您的環境交易結合,便需要使用 FullAutomatic。 這兩個值同時仰賴稱為服務的功能 (不包含元件),因此在使用這些值的時候,您應該在 Windows XP Service Pack 2 或 Windows Server 2003 上執行。

Full 指定了 System.TransactionsSystem.EnterpriseServices 的環境交易一律相同。 它最後會建立一個新的 System.EnterpriseServices 交易式內容,並套用目前交易,讓 TransactionScope 成為該內容的目前交易。 這樣一來,Current 中的交易就會與 Transaction 中的交易完全同步處理。 此值會對效能帶來負面影響,因為可能需要建立新的 COM+ 內容。

Automatic 指定下列需求:

  • 在檢查過 Current 之後,如果 System.Transactions 偵測到自己正於預設內容以外的內容中執行時,就會支援 COM+ 內容中的所有交易。 請注意,預設內容無法包含交易。 因此,在預設內容中,就算包含了 Automatic,儲存在 System.Transactions 使用的執行緒區域儲存區中的交易就會傳回至 Current

  • 如果建立了新的 TransactionScope 物件,而建立作業發生在預設內容以外的內容之中,則 TransactionScope 物件的目前交易應該會反映在 COM+ 中。 在此情況下,Automatic 會有如 Full 的反應 (好像它建立了新的 COM+ 內容一樣)。

此外,當 CurrentFull 同時設定為 Automatic,則兩種模式同時將意味著無法直接設定 Current。 任何嘗試直接設定 Current (而不是建立 TransactionScope) 的動作將導致產生 InvalidOperationExceptionEnterpriseServicesInteropOption 列舉型別值將由未明確指定使用值的新交易範圍所繼承。 例如,如果您使用 TransactionScope 來建立新的 Full 物件,然後建立了第二個 TransactionScope 物件 (但卻未指定 EnterpriseServicesInteropOption 值),則第二個 TransactionScope 物件同樣具有 Full

簡言之,建立新的交易範圍時將適用下列規則:

  1. 檢查 Current 以查看是否有交易。 檢查結果為:

  2. 這時會檢查 TransactionScopeOption 建構函式所傳入的 TransactionScope 列舉型別值。 這項檢查可決定是否必須建立新的交易。

  3. 如果需要建立新的交易,則下列各項 EnterpriseServicesInteropOption 值將產生:

    • Full:會建立與 COM+ 內容相關聯的交易。

    • None:建立 System.Transactions 交易。

    • Automatic:如果有 COM+ 內容,則建立交易,並將其附加至內容。

下表說明了 Enterprise Services (ES) 內容,以及需要使用 EnterpriseServicesInteropOption 列舉型別之交易的交易式範圍。

ES 內容 自動 完整
預設內容 預設內容 預設內容 建立新項目
交易式內容
非預設內容 維護用戶端內容 建立新的交易式內容 建立新的交易式內容

下表說明了環境交易在特定 System.EnterpriseServices 內容中的意義,以及需要使用 EnterpriseServicesInteropOption 列舉型別之交易的交易式範圍。

ES 內容 自動 完整
預設內容 ST ST ES
非預設內容 ST ES ES

在上一個表格: