Transaction Propagation
WCF can propagate transactions across the service boundary. This enables a service to participate in a client's transaction, and the client to include operations on multiple services in the same transaction. The client itself may or may not be a WCF service. Both the binding and the operation contract configuration control the decision as to whether or not the client's transaction is propagated to the service. I call any binding that is capable of propagating the client's transaction to the service if configured to do so a transaction-aware binding. Only the TCP, IPC, and WS bindings are transaction-aware.
Transaction Flow and Bindings
By default, transaction-aware bindings do not propagate transactions. The reason is
that, like most everything else in WCF, it is an opt-in setting: the service host or
administrator has to explicitly give its consent to accepting incoming transactions,
potentially from across the organization or the business boundaries. To propagate a
transaction, you must explicitly enable it in the binding on both the service host and
client sides. All transaction-aware bindings offer the Boolean property TransactionFlow, such as:
public class NetTcpBinding : Binding,...
{
public bool TransactionFlow
{get;set;}
//More members
}TransactionFlow defaults to false. To enable propagation, simply set this property to
true, either programmatically or in the host config
file. For example, in the case of the TCP binding:
NetTcpBinding tcpBinding = new ...