Short answer: make your service calls under TransactionScopeand make sure that the calls themselves are configured to work under transactions.
TL; DR read this article here .
Basically, you need to decorate your Operating Contract method as such:
[TransactionFlow(TransactionFlowOption.Allowed)]
void MyWcfServiceCall() {...}
:
[OperationBehavior(TransactionScopeRequired = true)]
void MyWcfServiceCall() {...}
TransactionScope
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew)) {
myServiceClient.MyWcfServiceCall();
myOtherServiceClient.MyOtherWcfServiceCall();
tx.Complete();
}
, transactionFlow true:
<bindings>
<wsHttpBinding>
<binding name="MyServiceBinding" transactionFlow="true" ... />
</wsHttpBinding>
</bindings>