The following illustration shows how transactions are used by the sending and receiving applications. In this model, MSMQ uses two transactions: one to send messages to the queue and the other to retrieve messages from the queue.
In this model, the sending transaction can commit to sending the messages to the queue, and the receiving application can commit to retrieving the messages; MSMQ provides its own confirmation process to notify the sending application that either the messages were retrieved from the queue or why the receiving application failed to retrieve them.
Note A single transaction can contain both transaction send and receive calls.
MSMQ provides several ways to send and receive messages through transactions. Transactions can be called either explicitly by providing pointers to a transaction object, or implicitly, directing MSMQ to find the appropriate transaction object.
Transactions that can be explicitly called include MSMQ internal transactions and the Microsoft® Distributed Transaction Coordinator (MS DTC) external transactions. For information on these transactions, see:
Transactions that can be implicitly called include the current Microsoft® Transaction Server™ (MTS) and current XA transactions. The current MTS or XA transaction is only used if it is available. In these cases, MSMQ decides (with the help of MTS or MS DTC) whether the call will truly be part of a transaction. For information on these transactions, see: