共用方式為


交易管理升級

Windows 會一起裝載一組服務與模組,這些服務與模組會共同構成交易管理員。 交易管理升級描述將交易從其中一個交易管理員的組件移轉至另一個組件。

System.Transactions 包含一個交易管理員元件,可協調最多涉及的交易、單一永久性資源或多個變動性資源。 由於交易管理員只會使用應用程式內部網域呼叫,因此會產生最佳效能。 開發人員不需要直接與交易管理員互動。 相反地,定義介面、常見行為和協助程序類別的通用基礎結構是由 System.Transactions 命名空間提供。

當您想將交易提供給不同應用程式域中的物件(包括跨程式及電腦界限)時,該基礎架構會自動提升由 Microsoft 分散式交易協調器 (MSDTC) 管理的交易。 如果您啟用另一個長期資源管理員,也會發生升級。 升級后,交易會維持在提升狀態中管理,直到完成為止。

System.Transactions 交易與 MSDTC 交易之間,有一種透過可提升單一階段登記(PSPE)提供的中介交易類型。 PSPE 是效能優化的另 System.Transactions 一個重要機制。 它可讓位於不同應用程式域、進程或計算機中的遠端持久資源參與 System.Transactions 交易,而不會使它升級為 MSDTC 交易。 如需 PSPE 的詳細資訊,請參閱 將資源列為交易中的參與者

如何啟動升級

交易擴大會降低效能,因為 MSDTC 位於個別的進程中,而將交易呈報至 MSDTC 會導致跨進程傳送訊息。 若要改善效能,您應延遲或避免升級至 MSDTC。因此,您需要了解升級的進行方式和時間。

只要 System.Transactions 基礎結構能夠管理變動性資源,並且至多管理一個支持單一階段通知的持久資源,交易的擁有權將保持在 System.Transactions 基礎結構之下。 交易管理員僅可供使用於存在於相同應用程式域的資源,且不需要將交易結果寫入磁碟以進行記錄。 當下列情況發生時,會導致 System.Transactions 基礎結構將交易擁有權轉移至 MSDTC 的擴大:

  • 至少有一個不支援單階段通知的持久資源被登錄在交易中。

  • 至少有兩個支援單一階段通知的持久資源會登記在交易中。 例如,使用 SQL Server 2005 登記單一連線,並不會導致交易升級。 不過,當您開啟 SQL Server 2005 資料庫的第二個連線,使資料庫加入交易中時,基礎結構會偵測到它是交易中的第二個永久性資源,並將其升級為 MSDTC 交易 System.Transactions

  • 發出將交易封送至不同應用程式域或不同進程的要求。 例如,跨應用程式域界限串行化交易物件。 交易物件是以傳值方式封送處理,這表示任何嘗試將它傳遞至應用程式域界限(即使在相同進程中),都會導致交易物件的串行化。 您可以呼叫採用 Transaction 做為參數的遠端方法,或嘗試存取遠端交易服務元件,以傳遞交易物件。 此交易物件的序列化導致升級,就像交易在應用程式領域中序列化時一樣。 它正在進行分配中,本地的交易管理員已不再足夠。

下表列出在升級過程中可能會被擲出的所有可能例外狀況。

例外狀況類型 狀況
InvalidOperationException 嘗試將隔離級別等於 Snapshot 的交易升級。
TransactionAbortedException 交易管理員已關閉。
TransactionException 升級失敗,應用程式已被中止。