MSMQMessage.MsgClass

 

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

(Introduced in MSMQ 2.0.) The MsgClass property of the MSMQMessage object indicates the message type. A message can be a normal Message Queuing message, a positive or negative (arrival and read) acknowledgment message, or a report message. Typically this property is set by Message Queuing when it sends the message, however it can also be set by a connector application when the connector application sends a message.

This property supersedes MSMQMessage.Class.

Data type: Long
Run-time access: Read-only
Property MsgClass As Long  

Property Value

MsgClass can have one of the following values:

Normal messages (all messages created by your application):

MQMSG_CLASS_NORMAL

A normal Message Queuing message.

Positive acknowledgment messages:

MQMSG_CLASS_ACK_REACH_QUEUE

The original message reached its destination queue.

MQMSG_CLASS_ACK_RECEIVE

The original message was retrieved by the receiving application.

Negative arrival acknowledgment messages:

MQMSG_CLASS_NACK_ACCESS_DENIED

The access rights for placing messages in the destination queue are not allowed for the sending application.

MQMSG_CLASS_NACK_BAD_DST_Q

The destination queue is not available to the sending application.

MQMSG_CLASS_NACK_BAD_ENCRYPTION

The destination queue manager could not decrypt a private (encrypted) message (see MSMQMessage.PrivLevel).

MQMSG_CLASS_NACK_BAD_SIGNATURE

Message Queuing could not authenticate the original message. The digital signature attached to the original message is not valid.

MQMSG_CLASS_NACK_COULD_NOT_ENCRYPT

The source queue manager could not encrypt a private message (see MSMQMessage.PrivLevel).

MQMSG_CLASS_NACK_HOP_COUNT_EXCEEDED

The original message's hop count is exceeded.

MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_MSG

A nontransactional message was sent to a transactional queue.

MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_Q

A transactional message was sent to a nontransactional queue.

MQMSG_CLASS_NACK_PURGED

The message was purged before reaching the destination queue.

MQMSG_CLASS_NACK_Q_EXCEED_QUOTA

The original message's destination queue is full.

MQMSG_CLASS_NACK_REACH_QUEUE_TIMEOUT

Either the time-to-reach-queue or time-to-be-received timer expired before the original message could reach the destination queue.

For transactional messages, this is an in-doubt negative acknowledgment. For example, the local queue manager sets this class when the message timer expires, even though a positive confirmation may be in route from the remote queue manager.

MQMSG_CLASS_NACK_SOURCE_COMPUTER_GUID_CHANGED

The source computer joined a domain or moved to a new forest while the transactional message was waiting in an outgoing queue to be delivered to its destination. As a result, the source computer has a new msmq (MSMQ-Configuration) object with a new GUID, so the message was moved to the transactional dead-letter queue or discarded to prevent a possible duplicate message from reaching the destination queue.

MQMSG_CLASS_NACK_UNSUPPORTED_CRYPTO_PROVIDER

The destination queue manager does not have the enhanced (128-bit) cryptographic provider installed.

Negative read acknowledgment messages:

MQMSG_CLASS_NACK_Q_DELETED

The queue was deleted before the message could be read from the queue.

MQMSG_CLASS_NACK_Q_PURGED

The queue was purged and the message no longer exists.

MQMSG_CLASS_NACK_RECEIVE_TIMEOUT

The original message was not removed from the queue before its time-to-be-received timer expired.

For transactional messages, this means that the remote queue manager has indicated that the message was not retrieved. This is the only negative acknowledgment that can be trusted to indicate the message was not retrieved.

MQMSG_CLASS_NACK_RECEIVE_TIMEOUT_AT_SENDER

For transactional messages only. The local queue manager has indicated that the original message was not removed from the queue before its time-to-be-received timer expired.

This class is an in-doubt negative acknowledgment. For example, the local queue manager will set this class when the time-to-be-received timer expires, even though a positive confirmation may be in route from the remote queue manager.

Report messages:

MQMSG_CLASS_REPORT

Sent each time the message enters or leaves a Message Queuing server.

Remarks

Acknowledgment messages are generated by Message Queuing whenever the sending application requests them. Message Queuing returns the appropriate acknowledgment message to the administration queue that is specified by the sending application. For information on acknowledgment messages, see Acknowledgment Messages.

Transactional messages can have two in-doubt negative acknowledgments: MQMSG_CLASS_NACK_REACH_QUEUE_TIMEOUT and MQMSG_CLASS_NACK_RECEIVE_TIMEOUT_AT_SENDER. These two classes are considered in doubt because they can be set by the local queue manager even though a confirmation notification may be in route from the remote queue manager. The only trusted negative acknowledgment is MQMSG_CLASS_NACK_RECEIVE_TIMEOUT, because this class is set by the remote queue manager.

Report messages are generated by Message Queuing whenever a report queue is defined at the source queue manager.

When reading messages in an administration queue or dead-letter queue, retrieve MsgClass to find out why the message was sent to the queue.

When a connector application creates an acknowledgment message, it must set the class of the acknowledgment message the correct type. To do this the connector application must set MgClass and MSMQMessage.ConnectorTypeGuid. The MsgClass property is ignored if the MSMQMessage.ConnectorTypeGuid property is not also set when the message is sent.

In C++ COM applications, you must use a smart pointer to the IMSMQMessage2 or IMSMQMessage3 interface to expose the MsgClass property.

Equivalent API Function Property

With API function calls, the equivalent property is PROPID_M_CLASS.

Example Code

The following example is included in Using Message Queuing.

For an example of See
Retrieving messages based on their class Visual Basic Code Example: Acknowledgment Class Filter

Requirements

Windows NT/2000/XP: Included in Windows 2000 and later.

Windows 95/98/Me: Unsupported.

Header: Declared in Mqoai.h.

Library: Use Mqoa.lib.

See Also

MSMQMessage
MSMQMessage.PrivLevel
PROPID_M_CLASS