ServiceModel Transaction Configuration
Windows Communication Foundation (WCF) provides three attributes for configuring transactions for a service:
Most of the predefined bindings WCF provides contain the
transactionProtocol attributes, so that you can configure the binding to accept incoming transactions for a specific endpoint using a specific transaction flow protocol. In addition, you can use the
transactionFlow element and its
transactionProtocol attribute to build your own custom binding. For more information about setting the configuration elements, see <binding> and WCF Configuration Schema.
transactionFlow attribute specifies whether transaction flow is enabled for service endpoints that use the binding.
transactionProtocol attribute specifies the transaction protocol to use with service endpoints that use the binding.
The following is an example of a configuration section that configures the specified binding to support transaction flow, as well as a use the WS-AtomicTransaction protocol.
<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>
You can configure the
transactionTimeout attribute for your WCF service in the
behavior element of the configuration file. The following code demonstrates how to do this.
<configuration> <system.serviceModel> <behaviors> <behavior name="NewBehavior" transactionTimeout="00:01:00" /> <!-- 1 minute timeout --> </behaviors> </system.serviceModel> </configuration>
transactionTimeout attribute specifies the time period within which a new transaction created at the service must complete. It is used as the TransactionScope time-out for any operation that establishes a new transaction, and if OperationBehaviorAttribute is applied, the TransactionScopeRequired property is set to
The time-out specifies the duration of time from the creation of the transaction to the completion of phase 1 in the two-phase commit protocol.
If this attribute is set within a
service configuration section, you should apply at least one method of the corresponding service with OperationBehaviorAttribute, in which the TransactionScopeRequired property is set to
Note that the time-out value used is the smaller value between this
transactionTimeout configuration setting and any TransactionTimeout property.