Explicit Transaction Programming
The transactional programming model described so far can only be
used declaratively by transactional services. Non-service clients,
nontransactional services, and plain .NET objects called downstream by a
service cannot take advantage of it. For all these cases, WCF relies on
the transactional infrastructure available with .NET in the System.Transactions namespace. You may also rely on System.Transactions even in transactional
services, when exploiting some advanced features such as transaction
events, cloning, asynchronous commits, and manual transactions. I
described the capabilities of
System.Transactions in my MSDN
whitepaper “Introducing System.Transactions in the .NET Framework 2.0”
(published April 2005; updated December 2005). The following sections
contain excerpts from that article describing how to use the core
aspects of System.Transactions in the
context of WCF. Please refer to the whitepaper for detailed discussions
of the rest of the features.
The TransactionScope Class
The most common way of using transactions explicitly is
via the TransactionScope
class:
public sealed class TransactionScope : IDisposable
{
public TransactionScope();
//Additional constructors
public void Complete();
public void Dispose();
}As its name implies, the TransactionScope class is used to scope a
code section with a transaction, as demonstrated in Example 7-7.
Example 7-7. Using TransactionScope
using(TransactionScope scope = new TransactionScope()) { /* Perform ...