ASP.NET XML Web サービスでのトランザクション

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

Web サービスのトランザクション サポートは、MTS (Microsoft Transaction Server) および COM+ サービスと同じ分散トランザクション モデルに基づく、共通言語ランタイムのトランザクション サポートを利用します。このモデルでは、オブジェクトがトランザクションに参加するかどうかを宣言によって決定するという方法を使用します。トランザクションのコミットおよびロールバックを処理する特定のコードを記述する必要はありません。ASP.NET を使用して作成した Web サービスの場合は、Web サービス メソッドに適用された WebMethod 属性の TransactionOption プロパティを設定することで、その Web サービスのトランザクション動作を宣言できます。例については、「方法 : ASP.NET を使用して作成した Web サービスでトランザクションに参加する」を参照してください。

Web サービス メソッドの実行中に例外がスローされた場合、トランザクションは自動的に中止されます。逆に言うと、例外が発生しない場合は、トランザクションは自動的にコミットされます。

WebMethodAttribute 属性の TransactionOption プロパティでは、Web サービス メソッドがトランザクションに参加する方法を指定します。この宣言レベルはトランザクションのロジックを表しますが、物理トランザクションから 1 ステップ削除されたものです。物理トランザクションは、データベースやメッセージ キューなどのデータ リソースにトランザクション オブジェクトがアクセスするときに発生します。オブジェクトに関連付けられているトランザクションは、適切なリソース マネージャーに自動的にフローします。.NET Framework SQL Server 用データ プロバイダーや .NET Framework OLE DB 用データ プロバイダーなどの .NET Framework データ プロバイダーは、オブジェクトのコンテキスト内でトランザクションを検索し、分散トランザクション コーディネーター (DTC: Distributed Transaction Coordinator) を通じてそのトランザクションに参加します。このトランザクション全体が、自動的に発生します。

Web サービス メソッドがトランザクションに参加できるのは、新しいトランザクションのルートとしてだけです。新しいトランザクションのルートとして、Microsoft SQL Server、Microsoft メッセージ キュー (MSMQ とも呼ばれます)、および Microsoft Host Integration Server を実行しているサーバーなどのリソース マネージャーとのすべての対話で、安定した分散アプリケーションを実行するために必要な ACID プロパティを維持します。トランザクションは複数の Web サービス メソッド間をフローしないため、他の Web サービス メソッドを呼び出す Web サービス メソッドは、異なるトランザクションに参加します。

85f292h1.note(ja-jp,VS.100).gif注 :
Web サービス メソッドを実装するメソッドが含まれているか関連付けられている拡張子 .asmx のファイルに対するインターネット要求が原因で、このメソッドが呼び出されない場合は、TransactionOption プロパティの値は無効になります。メソッドが含まれているクラスが Visual Studio .NET 内のプロジェクトのメンバーであり、Web サービスがプロキシ クラスを使用して呼び出されていない場合に、このような状況が発生する可能性があります。Visual Studio .NET では、プロキシ クラスは Web 参照を追加したときに生成されます。

参照

処理手順

方法 : ASP.NET を使用して作成した Web サービスでトランザクションに参加する

リファレンス

TransactionOption Enumeration
WebMethodAttribute.TransactionOption Property

その他のリソース

Transaction Processing
ASP.NET を使用した XML Web サービス