OperationBehaviorAttribute.TransactionScopeRequired プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
メソッドが、実行のためにトランザクション スコープを必要とするかどうかを示す値を取得または設定します。
public:
property bool TransactionScopeRequired { bool get(); void set(bool value); };
public bool TransactionScopeRequired { get; set; }
member this.TransactionScopeRequired : bool with get, set
Public Property TransactionScopeRequired As Boolean
プロパティ値
メソッドが実行のためにトランザクション スコープを必要とする場合は true
。それ以外の場合は false
。 既定値は、false
です。
例
必須の分散トランザクション内で実行する操作のコード例を次に示します。 TransactionScopeRequired プロパティは、操作がトランザクション スコープの下で実行されることを示し、TransactionAutoComplete プロパティは、未処理の例外が発生しなかった場合はトランザクション スコープが自動的にコミットされることを示します。 未処理の例外が発生すると、トランザクションは中止されます。
using System;
using System.ServiceModel;
using System.Transactions;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(Namespace="http://microsoft.wcf.documentation", SessionMode=SessionMode.Required)]
public interface IBehaviorService
{
[OperationContract]
string TxWork(string message);
}
// Note: To use the TransactionIsolationLevel property, you
// must add a reference to the System.Transactions.dll assembly.
/* The following service implementation:
* -- Processes messages on one thread at a time
* -- Creates one service object per session
* -- Releases the service object when the transaction commits
*/
[ServiceBehavior(
ConcurrencyMode=ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.PerSession,
ReleaseServiceInstanceOnTransactionComplete=true
)]
public class BehaviorService : IBehaviorService, IDisposable
{
Guid myID;
public BehaviorService()
{
myID = Guid.NewGuid();
Console.WriteLine(
"Object "
+ myID.ToString()
+ " created.");
}
/*
* The following operation-level behaviors are specified:
* -- Always executes under a transaction scope.
* -- The transaction scope is completed when the operation terminates
* without an unhandled exception.
*/
[OperationBehavior(
TransactionAutoComplete = true,
TransactionScopeRequired = true
)]
[TransactionFlow(TransactionFlowOption.Mandatory)]
public string TxWork(string message)
{
// Do some transactable work.
Console.WriteLine("TxWork called with: " + message);
// Display transaction information.
TransactionInformation info = Transaction.Current.TransactionInformation;
Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier);
Console.WriteLine("The tx status: {0}.", info.Status);
return String.Format("Hello. This was object {0}.",myID.ToString()) ;
}
public void Dispose()
{
Console.WriteLine(
"Service "
+ myID.ToString()
+ " is being recycled."
);
}
}
}
Imports System.ServiceModel
Imports System.Transactions
Namespace Microsoft.WCF.Documentation
<ServiceContract(Namespace:="http://microsoft.wcf.documentation", SessionMode:=SessionMode.Required)> _
Public Interface IBehaviorService
<OperationContract> _
Function TxWork(ByVal message As String) As String
End Interface
' Note: To use the TransactionIsolationLevel property, you
' must add a reference to the System.Transactions.dll assembly.
' The following service implementation:
' * -- Processes messages on one thread at a time
' * -- Creates one service object per session
' * -- Releases the service object when the transaction commits
<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Single, InstanceContextMode:=InstanceContextMode.PerSession, _
ReleaseServiceInstanceOnTransactionComplete:=True)> _
Public Class BehaviorService
Implements IBehaviorService, IDisposable
Private myID As Guid
Public Sub New()
myID = Guid.NewGuid()
Console.WriteLine("Object " & myID.ToString() & " created.")
End Sub
'
' * The following operation-level behaviors are specified:
' * -- Always executes under a transaction scope.
' * -- The transaction scope is completed when the operation terminates
' * without an unhandled exception.
'
<OperationBehavior(TransactionAutoComplete:=True, TransactionScopeRequired:=True), _
TransactionFlow(TransactionFlowOption.Mandatory)> _
Public Function TxWork(ByVal message As String) As String Implements IBehaviorService.TxWork
' Do some transactable work.
Console.WriteLine("TxWork called with: " & message)
' Display transaction information.
Dim info As TransactionInformation = Transaction.Current.TransactionInformation
Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier)
Console.WriteLine("The tx status: {0}.", info.Status)
Return String.Format("Hello. This was object {0}.", myID.ToString())
End Function
Public Sub Dispose() Implements IDisposable.Dispose
Console.WriteLine("Service " & myID.ToString() & " is being recycled.")
End Sub
End Class
End Namespace
注釈
操作をトランザクション スコープの中で実行するように要求する場合は、TransactionScopeRequired を true
に設定します。 フローされたトランザクションを使用できる場合、操作はそのトランザクションの中で実行されます。 使用できるトランザクションがない場合は、新しいトランザクションが作成され、操作の実行で使用されます。 フローされたトランザクションがサポートされるかどうかは、エンドポイントに指定されたバイディングが制御します。 したがって、正しい動作を取得するには、トランザクション フローがバインドによって許可されているかどうかと TransactionScopeRequired プロパティの相互関係を理解する必要があります。 次の表に、可能な動作を示します。
TransactionScopeRequired | バインドがトランザクション フローを許可 | 呼び出し元がトランザクションをフロー | 結果 |
---|---|---|---|
False | False | いいえ | メソッドは、トランザクションなしで実行されます。 |
True | False | いいえ | メソッドは新しいトランザクションを作成し、その中で実行されます。 |
True または False | False | はい | トランザクション ヘッダーについての SOAP エラーが返されます。 |
False | True | はい | メソッドは、トランザクションなしで実行されます。 |
True | True | はい | メソッドは、フローされたトランザクションで実行されます。 |
適用対象
.NET