ServiceModel-Transaktionskonfiguration
Windows Communication Foundation (WCF) bietet drei Attribute für die Konfiguration von Transaktionen für einen Dienst: transactionFlow
, transactionProtocol
, und transactionTimeout
.
Konfigurieren des transactionFlow-Attributs
Die meisten von WCF bereitgestellten vordefinierten Bindungen enthalten die Attribute transactionFlow
und transactionProtocol
, was bedeutet, dass Sie die Bindung so konfigurieren können, dass eingehende Transaktionen für einen bestimmten Endpunkt unter Verwendung eines bestimmten Transaktionsflussprotokolls akzeptiert werden. Darüber hinaus können Sie mit dem transactionFlow
-Element und dessen transactionProtocol
-Attribut Ihre eigene Bindung erstellen. Weitere Informationen zum Festlegen der Konfigurationselemente finden Sie unter <Bindung> und WCF-Konfigurationsschema.
Das transactionFlow
-Attribut gibt an, ob der Transaktionsfluss für Dienstendpunkte aktiviert ist, die die Bindung verwenden.
Konfigurieren des transactionProtocol-Attributs
Das transactionProtocol
-Attribut gibt das Transaktionsprotokoll an, das für die Dienstendpunkte verwendet werden soll, die die Bindung verwenden.
Nachstehend finden Sie ein Beispiel für einen Konfigurationsabschnitt, mit dem die angegebene Bindung so konfiguriert wird, dass der Transaktionsfluss unterstützt und das WS-Atomic-Transaktionsprotokoll verwendet wird.
<netNamedPipeBinding>
<binding name="test"
closeTimeout="00:00:10"
openTimeout="00:00:20"
receiveTimeout="00:00:30"
sendTimeout="00:00:40"
transactionFlow="true"
transactionProtocol="WSAtomicTransactionOctober2004"
hostNameComparisonMode="WeakWildcard"
maxBufferSize="1001"
maxConnections="123"
maxReceivedMessageSize="1000">
</binding>
</netNamedPipeBinding>
Konfigurieren des transactionTimeout-Attributs
Sie können das transactionTimeout
-Attribut für Ihren WCF-Dienst im behavior
-Element der Konfigurationsdatei konfigurieren. Im folgenden Codebeispiel wird die hierfür erforderliche Vorgehensweise veranschaulicht:
<configuration>
<system.serviceModel>
<behaviors>
<behavior name="NewBehavior" transactionTimeout="00:01:00" /> <!-- 1 minute timeout -->
</behaviors>
</system.serviceModel>
</configuration>
Das transactionTimeout
-Attribut legt den Zeitraum fest, innerhalb dessen eine neue, für den Dienst erstellte Transaktion abgeschlossen sein muss. Dieses Attribut wird als TransactionScope-Timeout für alle Vorgänge verwendet, die zu einer neuen Transaktion führen. Wird OperationBehaviorAttribute angewendet, wird die TransactionScopeRequired-Eigenschaft auf true
gesetzt.
Der Timeout gibt den Zeitraum von der Erstellung der Transaktion bis zum Abschluss von Phase 1 im Zweiphasencommit-Protokoll an.
Wenn dieses Attribut in einem service
-Konfigurationsabschnitt festgelegt wird, sollten Sie mindestens eine Methode des zugehörigen Diensts mit OperationBehaviorAttribute, in dem die TransactionScopeRequired-Eigenschaft auf true
gesetzt ist, anwenden.
Beachten Sie, dass als Timeoutwert der kleinere Wert von dieser transactionTimeout
-Konfigurationseinstellung und allen TransactionTimeout-Eigenschaften verwendet wird.