Is it real to use System.Transactions (primarily TransactionScope) across different AppDomains and processes?
DependentTransaction works only inside one AppDomain.
Yes, it works. We are flowing transactions via WCF, calling out of process transactional COM+ components, and manually passing transactions from a .NET 2.0 asmx web service to a WCF service.
Now that is not to say that the setup is not finicky. I think most of the issues were around getting MSDTC set up properly on all the servers.
UPDATE
We don't use DependentClone
. We are passing the transaction as a byte array using GetTransactionFromTransmitterPropagationToken
. Very similar to the second example of Propagating a Transaction Across AppDomains.
As an example:
Client:
public void CallOutOfProcessAndPassTransaction
{
Client client = new Client();
client.DoSomethingTransactional(
System.Transactions.TransactionInterop.GetTransmitterPropagationToken(
System.Transactions.Transaction.Current)
);
}
Service:
public void DoSomethingTransactional(byte[] tx)
{
using (TransactionScope ts = new TransactionScope(
TransactionInterop.GetTransactionFromTransmitterPropagationToken(tx)))
{
// Do Something
// vote to commit the transaction if the caller also agrees
ts.Complete();
}
}