ServiceModel-TransaktionsattributeServiceModel Transaction Attributes

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) bietet Eigenschaften für drei Standard-System.ServiceModel-Attribute, die es Ihnen ermöglichen, das Verhalten von Transaktionen für einen WCFWCF-Dienst zu konfigurieren: provides properties on three standard System.ServiceModel attributes that enable you to configure the behavior of transactions for a WCFWCF service:

TransactionFlowAttributeTransactionFlowAttribute

Das TransactionFlowAttribute-Attribut legt die Bereitschaft eines Vorgangs in einem Dienstvertrag fest, die vom Client eingehenden Transaktionen anzunehmen.The TransactionFlowAttribute attribute specifies the willingness of an operation in a service contract to accept incoming transactions from a client. Das Attribut bietet diese Kontrolle über das folgende Attribut: Transaktionen verwenden die TransactionFlowOption-Enumeration, um festzulegen, ob eine eingehende Transaktion Mandatory, Allowed oder NotAllowedist.The attribute provides this control with the following property: Transactions use the TransactionFlowOption enumeration to specify whether an incoming transaction is Mandatory, Allowed, or NotAllowed.

Dies ist das einzige Attribut, das Dienstvorgänge zu externen Interaktionen mit einem Client verknüpft.This is the only attribute that relates service operations to external interactions with a client. Die in den folgenden Abschnitten beschriebenen Attribute beziehen sich auf die Verwendung von Transaktionen innerhalb der Ausführung des Vorgangs.The attributes described in the following sections relate to the use of transactions within the execution of the operation.

ServiceBehaviorAttributeServiceBehaviorAttribute

Das ServiceBehaviorAttribute-Attribut legt das interne Ausführungsverhalten einer Dienstvertragimplementierung fest.The ServiceBehaviorAttribute attribute specifies the internal execution behavior of a service contract implementation. Zu den transaktionsspezifischen Eigenschaften dieses Attributs gehören:Transaction-specific properties of this attribute include:

  • TransactionAutoCompleteOnSessionClose gibt an, ob eine nicht abgeschlossene Transaktion beim Schließen der Sitzung abgeschlossen wird.TransactionAutoCompleteOnSessionClose specifies whether to complete an uncompleted transaction when the session closes. Der Standardwert für diese Eigenschaft ist false.The default value for this property is false. Ist diese Eigenschaft true und wurde die eingehende Sitzung ordnungsgemäß beendet, anstatt aufgrund eines Netzwerk- oder Clientfehlers geschlossen zu werden, werden alle nicht abgeschlossenen Transaktionen erfolgreich abgeschlossen.If this property is true, and the incoming session was gracefully shut down instead of closing due to network or client faults, any uncompleted transaction is successfully completed. Ist diese Eigenschaft false oder wurde die Sitzung nicht ordnungsgemäß beendet, wird für alle nicht abgeschlossenen Transaktionen beim Schließen der Sitzung ein Rollback ausgeführt.Otherwise, if this property is false or if the session was not gracefully closed, any uncompleted transaction is rolled back when the session closes. Wenn diese Eigenschaft true ist, muss der eingehende Kanal sitzungsbasiert sein.If this property is true, the incoming channel must be session-based.

  • ReleaseServiceInstanceOnTransactionComplete legt fest, ob die zugrunde liegende Dienstinstanz beim Abschluss einer Transaktion freigegeben wird.ReleaseServiceInstanceOnTransactionComplete specifies whether the underlying service instance is released when a transaction completes. Der Standardwert für diese Eigenschaft ist true.The default value for this property is true. Die nächste eingehende Nachricht verursacht die Erstellung einer neuen zugrunde liegenden Instanz, wobei der Pro-Transaktionsstatus, über den die vorherige Instanz möglicherweise verfügte, verworfen wird.The next inbound message causes a new underlying instance to be created, discarding any per-transaction state that the previous instance might have held. Die Freigabe einer Dienstinstanz ist eine interne Aktion, die der Dienst durchführt, und hat keinen Einfluss auf bestehende Verbindungen oder Sitzungen, die von Clients möglicherweise aufgebaut wurden.Releasing a service instance is an internal action the service takes and has no impact on any existing connections or sessions that clients might have established. Diese Funktionalität entspricht der JIT-Aktivierungsfunktion (Just-in-Time), die COM+ bereitstellt.This functionality is equivalent to the just-in-time activation feature COM+ provides. Wenn die Eigenschaft true ist, muss ConcurrencyMode gleich Single sein.If the property is true, ConcurrencyMode must be equal to Single. Andernfalls löst der Dienst während des Starts eine ungültige Konfigurationsvalidierungsausnahme aus.Otherwise, the service throws an invalid configuration validation exception during startup.

  • TransactionIsolationLevel legt die Isolationsebene fest, die für Transaktionen innerhalb eines Diensts verwendet wird. Diese Eigenschaft nimmt einen der IsolationLevel-Werte an.TransactionIsolationLevel specifies the isolation level to use for transactions within the service; this property takes one of the IsolationLevel values. Ist die Isolationsebeneneigenschaft etwas anderes als Unspecified, muss die Isolationsebene einer eingehenden Transaktion der Einstellung dieser lokalen Eigenschaft entsprechen.If the local isolation level property is anything other than Unspecified, the isolation level of an incoming transaction must match the setting of this local property. Andernfalls wird die eingehende Transaktion abgelehnt, und ein Fehler wird an den Client zurückgesendet.Otherwise, the incoming transaction is rejected, and a fault is sent back to the client. Wenn TransactionScopeRequiredtrue ist und keine Transaktion übergeben wird, bestimmt diese Eigenschaft den für die lokal erstellte Transaktion zu verwendenden IsolationLevel-Wert.If TransactionScopeRequired is true, and no transaction is flowed, this property determines the IsolationLevel value to use for the locally created transaction. Wenn IsolationLevel festgelegt ist, um Unspecified, IsolationLevel Serializable verwendet wird.If IsolationLevel is set to Unspecified, IsolationLevelSerializable is used.

  • TransactionTimeout legt den Zeitraum fest, innerhalb dessen eine neue, am Dienst erstellte Transaktion abgeschlossen sein muss.TransactionTimeout specifies the time period within which a new transaction created at the service must complete. Ist dieser Zeitpunkt erreicht und wurde die Transaktion nicht abgeschlossen, wird sie abgebrochen.If this time is reached and the transaction has not been completed, it will abort. Die TimeSpan wird als TransactionScope-Timeout für alle Vorgänge verwendet, bei denen TransactionScopeRequired auf true gesetzt ist und für die eine neue Transaktion erstellt worden war.The TimeSpan is used as the TransactionScope time-out for any operations that have TransactionScopeRequired set to true and for which a new transaction was created. Der Timeout ist die maximal zulässige Dauer von der Erstellung einer Transaktion bis zum Abschluss der Phase 1 im Zweiphasen-Commitprotokoll.The time-out is the maximum allowed duration from the creation of the transaction to the completion of phase 1 in the two-phase commit protocol. Der verwendete Timeout ist immer der niedrigere Wert der TransactionTimeout-Eigenschaft und der transactionTimeout-Konfigurationseinstellung.The time-out value used is always the lower value between the TransactionTimeout property and the transactionTimeout configuration setting.

OperationBehaviorAttributeOperationBehaviorAttribute

Das OperationBehaviorAttribute-Attribut legt die Verhaltensweisen der Methoden in der Dienstimplementierung fest.The OperationBehaviorAttribute attribute specifies the behaviors of the methods in the service implementation. Sie können es verwenden, um das spezifische Ausführungsverhalten des Vorgangs anzugeben.You can use it to indicate the operation's specific execution behavior. Die Eigenschaften dieses Attributs haben keine Auswirkungen auf die WSDL-Beschreibung (Web Service Description Language) des Dienstvertrags. Es handelt sich lediglich um Elemente des WCFWCF-Programmiermodells, die übliche Funktionen, die Entwickler andernfalls selbst implementieren müssen, ermöglichen.Properties of this attribute do not affect the Web Service Description Language (WSDL) description of the service contract, and are purely elements of the WCFWCF programming model that enable common features that developers otherwise have to implement themselves.

Dieses Attribut verfügt über die folgenden transaktionsspezifischen Eigenschaften:This attribute has the following transaction-specific properties:

  • TransactionScopeRequired gibt an, ob eine Methode innerhalb eines aktiven Transaktionsbereichs ausgeführt werden muss.TransactionScopeRequired specifies whether a method must execute within an active transaction scope. Die Standardeinstellung ist false.The default is false. Ist das OperationBehaviorAttribute-Attribut für eine Methode nicht eingerichtet, wird darüber hinaus angegeben, dass die Methode in einer Transaktion nicht ausgeführt wird.If the OperationBehaviorAttribute attribute is not set for a method, it also implies that the method will not execute in a transaction. Wird für einen Vorgang kein Transaktionsumfang benötigt, sind alle im Nachrichtenheader vorhandenen Transaktionen nicht aktiviert und bleiben ein Element der IncomingMessageProperties des OperationContext.If a transaction scope is not required for an operation, any transaction that is present within the message header is not activated and remains as an element of the IncomingMessageProperties of the OperationContext. Ist für einen Vorgang ein Transaktionsumfang erforderlich, leitet sich die Quelle für die Transaktion folgendermaßen ab:If a transaction scope is required for an operation, the source for the transaction is derived from one of the following:

    • Wenn eine Transaktion von einem Client übergeben wird, wird die Methode unter einem Transaktionsumfang ausgeführt, der mithilfe der verteilten Transaktion erstellt wurde.If a transaction is flowed from the client, the method is executed under a transaction scope created using that distributed transaction.

    • Bei einer in der Warteschlange befindlichen Transaktion wird die Transaktion verwendet, die zum Entfernen der Nachricht aus der Warteschlange zum Einsatz kommt.With a queued transport, the transaction used to dequeue the message is used. Beachten Sie, dass es sich bei der verwendeten Transaktion nicht um eine übertragene Transaktion handelt, da diese nicht vom Originalabsender der Nachricht bereitgestellt wurde.Note that the transaction used is not a flowed transaction, in that it was not provided by the original sender of the message.

    • Ein benutzerdefinierter Transport kann durch die Verwendung der TransportTransactionProperty eine Transaktion bereitstellen.A custom transport can provide a transaction through the use of the TransportTransactionProperty.

    • Wenn keiner der oben aufgeführten Posten eine externe Quelle für eine Transaktion bereitstellt, wird eine neue Transaction-Instanz direkt vor dem Aufruf der Methode erstellt.If none of the above provides an external source for a transaction, a new Transaction instance is created immediately prior to calling the method.

  • TransactionAutoComplete legt fest, ob die Transaktion, in der die Methode ausgeführt wird, automatisch abgeschlossen wird, wenn keine Ausnahmefehler ausgelöst werden.TransactionAutoComplete specifies whether the transaction in which the method executes is automatically completed if no unhandled exceptions are thrown. Ist diese Eigenschaft true, kennzeichnet die aufrufende Infrastruktur die Transaktion automatisch als "abgeschlossen", wenn die Benutzermethode zurückgegeben wird, ohne dass eine Ausnahme ausgelöst wird.If this property is true, the calling infrastructure automatically marks the transaction as "completed" if the user method returns without throwing an exception. Ist diese Eigenschaft false, wird die Transaktion an die Instanz angehängt und nur als "abgeschlossen" gekennzeichnet, wenn der Client eine nachfolgende Methode aufruft, die mit dieser Eigenschaft auf true gekennzeichnet ist, oder wenn eine nachfolgende Methode explizit SetTransactionComplete aufruft.If this property is false, the transaction is attached to the instance, and is only marked as "completed" if the client calls a subsequent method that is marked with this property equal to true, or if a subsequent method explicitly calls SetTransactionComplete. Wird keiner der genannten Posten durchgeführt, wird die Transaktion nie abgeschlossen und die darin befindliche Arbeit wird nicht ausgeführt, es sei denn die TransactionAutoCompleteOnSessionClose-Eigenschaft ist auf true gesetzt.Failure to perform either of these results in the transaction never being "completed," and the contained work is not committed, unless the TransactionAutoCompleteOnSessionClose property is set to true. Ist diese Eigenschaft auf true gesetzt, müssen Sie einen Kanal mit einer Sitzung verwenden und der InstanceContextMode muss auf PerSession gesetzt sein.If this property is set to true, you must use a channel with a session, and the InstanceContextMode must be set to PerSession.