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

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 サービス メソッドは、異なるトランザクションに参加します。

Noteメモ :

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 サービス

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.