WebMethodAttribute.TransactionOption プロパティ
XML Web サービス メソッドのトランザクション サポートを示します。
Public Property TransactionOption As TransactionOption
[C#]
public TransactionOption TransactionOption {get; set;}
[C++]
public: __property TransactionOption get_TransactionOption();public: __property void set_TransactionOption(TransactionOption);
[JScript]
public function get TransactionOption() : TransactionOption;public function set TransactionOption(TransactionOption);
プロパティ値
XML Web サービス メソッドのトランザクション サポート。既定値は Disabled です。
解説
HTTP プロトコルの状態のない性質のため、XML Web サービス メソッドはルート オブジェクトとしてだけトランザクションに参加できます。XML Web サービス メソッドと同じトランザクションに参加する COM オブジェクトが、コンポーネント サービス管理ツールのトランザクション内で実行されることが示されている場合、XML Web サービス メソッドは、その COM オブジェクトをすべて呼び出すことができます。 TransactionOption プロパティが Required または RequiresNew である XML Web サービス メソッドが、 TransactionOption プロパティが Required または RequiresNew である別の XML Web サービス メソッドを呼び出すと、各 XML Web サービス メソッドはそれぞれ独自のトランザクションに参加します。これは、XML Web サービス メソッドがトランザクション内で機能できるのは、ルート オブジェクトとしてだけであるためです。
項目 | 説明 |
---|---|
Disabled | XML Web サービス メソッドが、トランザクションのスコープ内で実行されないことを示します。要求が処理されるときに、XML Web サービス メソッドがトランザクションなしで実行されます。
[WebMethod(TransactionOption= TransactionOption.Disabled)] |
NotSupported | XML Web サービス メソッドが、トランザクションのスコープ内で実行されないことを示します。要求が処理されるときに、XML Web サービス メソッドがトランザクションなしで実行されます。
[WebMethod(TransactionOption= TransactionOption.NotSupported)] |
Supported | XML Web サービス メソッドが、トランザクションのスコープ内で実行されないことを示します。要求が処理されるときに、XML Web サービスがトランザクションなしで作成されます。
[WebMethod(TransactionOption= TransactionOption.Supported)] |
Required | XML Web サービス メソッドに、トランザクションが必要であることを示します。XML Web サービス メソッドは、トランザクションにルート オブジェクトとしてだけ参加できるため、XML Web サービス メソッド用に新しいトランザクションが作成されます。
[WebMethod(TransactionOption= TransactionOption.Required)] |
RequiresNew | XML Web サービス メソッドに新しいトランザクションが必要であることを示します。要求が処理されるときに、新しいトランザクション内で XML Web サービスが作成されます。
[WebMethod(TransactionOption= TransactionOption.RequiresNew)] |
XML Web サービス メソッドから例外がスローされるか、XML Web サービス メソッドによって例外がキャッチされない場合、トランザクションは自動的に中止されます。例外が発生しない場合、このメソッドが SetAbort を明示的に呼び出さない限り、トランザクションは自動的にコミットされます。
使用例
[Visual Basic, C#] Transfer
メソッドが呼び出されたときに新しいトランザクションを開始する例を次に示します。
<%@ WebService Language="VB" Class="Bank"%>
<%@ assembly name="System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" %>
Imports System
Imports System.Web.Services
Imports System.EnterpriseServices
Public Class Bank
Inherits WebService
<WebMethod(TransactionOption := TransactionOption.RequiresNew)> _
Public Sub Transfer(Amount As Long, AcctNumberTo As Long, AcctNumberFrom As Long)
Dim objBank As New MyCOMObject()
If objBank.GetBalance(AcctNumberFrom) < Amount Then
' Explicitly abort the transaction.
ContextUtil.SetAbort()
Else
' Credit and Debit method explictly vote within
' the code for their methods whether to commit or
' abort the transaction.
objBank.Credit(Amount, AcctNumberTo)
objBank.Debit(Amount, AcctNumberFrom)
End If
End Sub
End Class
[C#]
<%@ WebService Language="C#" Class="Bank"%>
<%@ assembly name="System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" %>
using System;
using System.Web.Services;
using System.EnterpriseServices;
public class Bank : WebService {
[ WebMethod(TransactionOption=TransactionOption.RequiresNew) ]
public void Transfer(long Amount, long AcctNumberTo, long AcctNumberFrom) {
MyCOMObject objBank = new MyCOMObject();
if (objBank.GetBalance(AcctNumberFrom) < Amount )
// Explicitly abort the transaction.
ContextUtil.SetAbort();
else {
// Credit and Debit methods explictly vote within
// the code for their methods whether to commit or
// abort the transaction.
objBank.Credit(Amount, AcctNumberTo);
objBank.Debit(Amount, AcctNumberFrom);
}
}
}
[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
WebMethodAttribute クラス | WebMethodAttribute メンバ | System.Web.Services 名前空間 | TransactionOption