Freigeben über


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.

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

true, wenn die Methode für die Ausführung einen Transaktionsbereich benötigt, andernfalls false. Der Standardwert ist false.

Beispiele

Im folgenden Codebeispiel wird ein Vorgang veranschaulicht, der innerhalb einer erforderlichen verteilten Transaktion ausgeführt wird. 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. Wenn eine nicht behandelte Ausnahme auftritt, wird die Transaktion abgebrochen.

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. Wenn ein Transaktionsfluss verfügbar ist, wird der Vorgang innerhalb dieser Transaktion ausgeführt. Wenn kein Transaktionsfluss verfügbar ist, wird eine neue Transaktion erstellt und für die Vorgangsausführung verwendet. Die im Endpunkt angegebene Bindung steuert, ob Transaktionsflüsse unterstützt werden. 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. In der folgenden Tabelle sind die möglichen Verhaltensweisen aufgeführt.

TransactionScopeRequired Bindung gestattet Transaktionsfluss Aufrufer übergibt Transaktion Ergebnis
False False Nein Die Methode wird ohne eine Transaktion ausgeführt.
True False Nein Die Methode wird erstellt und innerhalb einer neuen Transaktion ausgeführt.
„true“ oder „false“ False Yes Ein SOAP-Fehler wird für den Transaktionsheader zurückgegeben.
False True Yes Die Methode wird ohne eine Transaktion ausgeführt.
True True Yes Die Methode wird unter dem Transaktionsfluss ausgeführt.

Gilt für: