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 2.0 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( )) { ...
Get Programming WCF Services, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.