Just an update on this. Using WCF NetMSMQBinding, the service contract requires a transactionscope. If you do not, you could lose the message. That transactionscope flows from the distributed transaction MSMQ creates as the message is read out of the queue on down to the service contract operation.
What happens is this...
1) WCF receives message in queue
2) MSMQ, transaction queue - creates a System.Transactions.Transaction as the message moves from queue to service.
3) Service is decorated with
[OperationBehavior(TransactionAutoComplete=true,TransactionScopeRequired=true)]
4) Call to update an entity is made through the component layer.
5) Component layer calls transactionManager = ConnectionScope.ValidateOrCreateTransaction();
6) XXXConnection does not support parallel transactions. Exception thrown.
Without commiting the original distributed transaction before making the call to save, I don't see an elegant way around this. I tried checking inside ConnectionScope- if there is an ambient transaction, don't create one. That works great until you get to the provider level which checks the transaction before it performs an update (or insert, etc) - if its null, it creates one - and we blow up again.
Who has dealt with this before? Anyone using NetTiers with distributed transactions at the enterprise level?