HOWTO: Send in a MSMQ Single-Message TransactionLast reviewed: January 7, 1998Article ID: Q179016 |
The information in this article applies to:
SUMMARYAs part of its internal transaction support, Microsoft Message Queue Server (MSMQ) provides specific functionality to handle cases where an MSMQ application wants to send only a single message in a single transaction. One reason to do this is to ensure exactly-once delivery, without needing to coordinate with other activities into a single transaction. The benefits of using this functionality are:
MORE INFORMATIONThe following code sample illustrates sending a single-message transaction using the ActiveX methods:
Dim qinfo As New MSMQQueueInfo Dim q As MSMQQueue Dim m As New MSMQMessage qinfo.PathName = "MachineName\TransactionalQueueName" Set q = qinfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE) m.Send q, MQ_SINGLE_MESSAGE q.CloseUsing C API, set the pTransaction parameter to MQ_SINGLE_MESSAGE. The following code uses the "Sending Messages Using an Internal Transaction" example from the SDK; it demonstrates an explicit internal transactional send and modifies it for the implicit semantics:
void TransactSend(QUEUEHANDLE h, MQMSGPROPS * pMsgProps) { HRESULT hr; printf ("\nStarting transaction...\n\n"); ////////////////////////////////////// // Call MQSendMessage to send a transactional message to // the destination queue. ////////////////////////////////////// hr = MQSendMessage(h, // Handle to dest queue &msgprops, // Pointer to MQMSGPROPS MQ_SINGLE_MESSAGE); // Implicit internal // transactional message. if (FAILED(hr)) { printf("\nFailed in MQSendMessage(). hresult- %lxh\n", (DWORD) hr) ; } else { printf ("Committing the transaction... "); } } REFERENCESFor more information and sample code regarding MSMQ transactions, see the "MQSendMessage," "MSMQ Internal Transactions," and "Transaction Programming Considerations" topics in the SDK online Help.
|
Additional query words: programming interface
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |