PROPID_M_XACTID
Applies To: Windows 10, Windows 7, Windows 8, Windows 8.1, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server Technical Preview, Windows Vista
(Read-only, introduced in MSMQ 2.0.) The PROPID_M_XACTID property indicates which transaction sent the message.
Property ID
PROPID_M_XACTID
Type Indicator
VT_VECTOR | VT_UI1
MQPROPVARIANT Field
caub
Property Value
Identifier of the transaction. See Remarks for a description of a transaction identifier.
Remarks
This property is available for MSMQ 2.0 and later. It is used by receiving applications to verify that a message was sent from a specific transaction. The transaction identifier is a 20-byte identifier that includes the computer identifier of the sending machine (first 16 bytes) followed by a transaction sequence number (4 bytes).
Transaction identifiers are not guaranteed to be unique because the transaction sequence numbers are not persistent and they start over again at 2^20. Message Queuing guarantees only that successive transactions will have different transaction sequence numbers.
You can use PROPID_M_XACTID along with two other properties to verify transaction boundaries. These two properties are properties for identifying the first and last message sent in a transaction: PROPID_M_FIRST_IN_XACT and PROPID_M_LAST_IN_XACT.
To retrieve the transaction identifier of a message, specify PROPID_M_XACTID and a buffer consisting of 20 unsigned characters to receive its value in the MQMSGPROPS structure.
Note
The buffer must consist of exactly 20 unsigned characters. Specifying either a smaller or larger buffer will result in an error.
The size of the buffer can be specified by the constant PROPID_M_XACTID_SIZE. Then call MQReceiveMessage or MQReceiveMessageByLookupId and examine the returned identifier.
Equivalent COM Property
With COM components, the equivalent property for retrieving the transaction identifier is MSMQMessage.TransactionId.
For information on | See |
---|---|
How transaction boundaries can be used | Checking for Transaction Boundaries when Receiving Messages |
Identifying the first message in the transaction | PROPID_M_FIRST_IN_XACT |
Identifying the last message in the transaction | PROPID_M_LAST_IN_XACT |
Example Code
The following code fragment shows how PROPID_M_XACTID is specified in arrays that can be used to initialize an MQMSGPROPS structure.
UCHAR rgucXactID[PROPID_M_XACTID_SIZE];
aMsgPropId[i] = PROPID_M_XACTID; // Property ID
aPropVar[i].vt = VT_VECTOR | VT_UI1; // Type indicator
aPropVar[i].caub.pElems = rgucXactID;
aPropVar[i].caub.cElems = PROPID_M_XACTID_SIZE;
i++;
The following example is included in Using Message Queuing.
For an example of | See |
---|---|
Identifying the first and last messages in a transaction | C/C++ Code Example: Checking Transaction Boundaries |
See Also
Message Properties
MQMSGPROPS
PROPID_M_LAST_IN_XACT
PROPID_M_XACTID