Use the Message class to peek or receive messages from a queue, or to have fine control over message properties when sending a message to a queue.
MessageQueue uses the Message class when it peeks or receives messages from queues, because both the MessageQueue.Peek and MessageQueue.Receive methods create a new instance of the Message class and set the instance's properties. The Message class's read-only properties apply to retrieving messages from a queue, while the read/write properties apply to sending and retrieving messages. When MessageQueue peeks or receives a message from a queue, its MessageReadPropertyFilter property determines which of the message's properties are retrieved.
The MessageQueue class's Send method allows you to specify any object type for a message being sent to that queue. You can use the MessageQueue instance's DefaultPropertiesToSend property to specify settings for generic messages sent to the queue. The types of settings include formatter, label, encryption, and authentication. You can also specify values for the appropriate DefaultPropertiesToSend members when you coordinate your messaging application to respond to acknowledgment and report messages. Using a Message instance to send a message to the queue gives you the flexibility to access and modify many of these properties—either for a single message or on a message-by-message basis. Message properties take precedence over DefaultPropertiesToSend.
Message data is stored in the Body property and to a lesser extent, the AppSpecific and Extension properties. When message data is encrypted, serialized, or deserialized, only the contents of the Body property are affected.
The contents of the Body property are serialized when the message is sent, using the Formatter property you specify. The serialized contents are found in the BodyStream property. You can also set the BodyStream property directly, for example, to send a file as the data content of a message. You can change the Body or Formatter properties at any time before sending the message, and the data will be serialized appropriately when you call Send.
The properties defined by the MessageQueue.DefaultPropertiesToSend property apply only to messages that are not of type Message. If you specify the DefaultPropertiesToSend property for a MessageQueue, the identically named properties in a Message instance sent to that queue cause these default properties to be ignored.
For a list of initial property values for an instance of Message, see the Message constructor.