OperationBehaviorAttribute.TransactionScopeRequired Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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. |