OperationBehaviorAttribute.TransactionScopeRequired Eigenschaft

Definition

Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob für die Ausführung der Methode ein Transaktionsbereich erforderlich ist.Gets or sets a value that indicates whether the method requires a transaction scope for its execution.

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

Eigenschaftswert

Boolean

true, wenn die Methode für die Ausführung einen Transaktionsbereich benötigt, andernfalls false.true if the method requires a transaction scope to execute; otherwise, false. Der Standardwert lautet false.The default is false.

Beispiele

Im folgenden Codebeispiel wird ein Vorgang veranschaulicht, der innerhalb einer erforderlichen verteilten Transaktion ausgeführt wird.The following code example shows an operation that executes within a mandatory distributed transaction. Die TransactionScopeRequired-Eigenschaft gibt an, dass der Vorgang im Rahmen eines Transaktionsbereichs ausgeführt wird. Die TransactionAutoComplete-Eigenschaft gibt an, dass der Transaktionsbereich automatisch abgeschlossen wird, wenn keine nicht behandelten Ausnahmen auftreten.The TransactionScopeRequired property indicates that the operation executes under a transaction scope and the TransactionAutoComplete property indicates that if no unhandled exceptions occur, the transaction scope is completed automatically. Wenn eine nicht behandelte Ausnahme auftritt, wird die Transaktion abgebrochen.If an unhandled exception does occur, the transaction is aborted.

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

Hinweise

Legen Sie TransactionScopeRequired auf true fest, um einzustellen, dass Ihr Vorgang innerhalb eines Transaktionsbereichs ausgeführt werden muss.Set the TransactionScopeRequired to true to require your operation to execute within a transaction scope. Wenn ein Transaktionsfluss verfügbar ist, wird der Vorgang innerhalb dieser Transaktion ausgeführt.If a flowed transaction is available, the operation executes within that transaction. Wenn kein Transaktionsfluss verfügbar ist, wird eine neue Transaktion erstellt und für die Vorgangsausführung verwendet.If one is not available, a new transaction is created and used for the operation execution. Die im Endpunkt angegebene Bindung steuert, ob Transaktionsflüsse unterstützt werden.The binding specified in the endpoint controls whether flowed transactions are supported. Daher müssen Sie die Interaktion zwischen Bindung und TransactionScopeRequired-Eigenschaft kennen und wissen, ob Transaktionsflüsse unterstützt werden, um das passende Verhalten zu erhalten.Therefore, to obtain the proper behavior you must understand the interaction between whether transaction flow is permitted by the binding and the TransactionScopeRequired property. In der folgenden Tabelle sind die möglichen Verhaltensweisen aufgeführt.The following table shows the possible behavior.

TransactionScopeRequiredTransactionScopeRequired Bindung gestattet TransaktionsflussBinding permits transaction flow Aufrufer übergibt TransaktionCaller flows transaction ErgebnisResult
FalseFalse FalseFalse NeinNo Die Methode wird ohne eine Transaktion ausgeführt.Method executes without a transaction.
TrueTrue FalseFalse NeinNo Die Methode wird erstellt und innerhalb einer neuen Transaktion ausgeführt.Method creates and executes within a new transaction.
„true“ oder „false“True or False FalseFalse JaYes Ein SOAP-Fehler wird für den Transaktionsheader zurückgegeben.A SOAP fault is returned for the transaction header.
FalseFalse TrueTrue JaYes Die Methode wird ohne eine Transaktion ausgeführt.Method executes without a transaction.
TrueTrue TrueTrue JaYes Die Methode wird unter dem Transaktionsfluss ausgeführt.Method executes under the flowed transaction.

Gilt für: