System.Transactions により提供される機能

ここでは、System.Transactions 名前空間により提供される機能を使用して、独自のトランザクション アプリケーションとリソース マネージャーを作成する方法について説明します。 特に、1 つまたは複数の参加要素を含むローカル トランザクションまたは分散トランザクションを作成し、参加する方法について説明します。

System.Transactions の概要

System.Transactions 名前空間内のクラスにより提供されるインフラストラクチャは、SQL Server、ADO.NET、メッセージ キュー (MSMQ)、および Microsoft 分散トランザクション コーディネーター (MSDTC) で開始されたトランザクションをサポートすることにより、トランザクション プログラミングを単純で効率的なものにします。 System.Transactions名前空間には明示的なプログラミング モデルに基づく、Transactionクラスだけでなく、暗黙的なプログラミング モデルを使用して、TransactionScopeトランザクションを自動的にインフラストラクチャによって管理するクラス。 この 2 つのモデルを使用したトランザクション アプリケーション作成方法の詳細については、「トランザクション アプリケーションの作成」を参照してください。

System.Transactions 名前空間には、リソース マネージャーを実装するための型も用意されています。 リソース マネージャーは、トランザクションで使用する永続性データまたは揮発性データを管理し、トランザクション マネージャーと連携してアプリケーションの原子性と分離を保証します。 System.Transactions インフラストラクチャにより提供されるトランザクション マネージャーは、複数の揮発性リソースまたは単一の永続性リソースに関連するトランザクションをサポートします。 リソース マネージャーの実装の詳細については、「リソース マネージャーの実装」を参照してください。

また、トランザクション マネージャーは、他の永続的リソース マネージャーがそれ自体をトランザクションに参加させた場合に、DTC などのディスク ベースのトランザクション マネージャーと連携して、ローカル トランザクションを分散トランザクションへと透過的にエスカレートします。 System.Transactions インフラストラクチャでは、主に 2 つの方法でパフォーマンスを向上させています。

  • ダイナミック エスカレーション。これにより、トランザクションが複数の分散リソースにわたる場合、System.Transactions インフラストラクチャが MSDTC のみを使用すること保証します。 ダイナミック エスカレーションの詳細については、 「トランザクション管理エスカレーション」のトピックを参照してください。

  • 昇格可能参加リスト。これにより、データベースなどのリソースが、トランザクションに参加している唯一のエンティティである場合に、トランザクションの所有権を取得できます。 その後、必要に応じて、System.Transactions インフラストラクチャがトランザクションの管理を MSDTC にエスカレートすることもできます。 これにより、MSDTC の使用頻度をさらに減らすことができます。 昇格可能参加リストの詳細については、「単一フェーズ コミットおよび昇格可能単一フェーズ通知を使用した最適化」のトピックを参照してください。

System.Transactions 名前空間は、AllowPartiallyTrustedCallers (APTCA)、DistributedTransactionPermission (DTP)、および完全な信頼の 3 つの信頼レベルを定義し、公開するリソースの種類へのアクセスを制限しています。 さまざまな信頼レベルの詳細については、「リソースへのアクセス時のセキュリティ信頼レベル」を参照してください。

このセクションの内容

トランザクション アプリケーションの作成

System.Transactions 名前空間には、トランザクション アプリケーションを作成するための 2 つのモデルが用意されています。 「トランザクション スコープを使用した暗黙的なトランザクションの実装」では、System.Transactions 名前空間で、TransactionScope クラスを使用した暗黙的なトランザクションの作成がどのようにサポートされるかについて説明しています。

CommittableTransaction を使用した明示的なトランザクションの実装」では、System.Transactions 名前空間で、CommittableTransaction クラスを使用した明示的なトランザクションの作成がどのようにサポートされるかについて説明しています。

トランザクション アプリケーションの作成の詳細については、「トランザクション アプリケーションの作成」を参照してください。

リソース マネージャーの実装

トランザクションに参加できるリソース マネージャーの実装については、「リソース マネージャーの実装」を参照してください。 ここでは、リソースの参加、トランザクションのコミット、障害後の回復、および最適化のベスト プラクティスについて説明しています。