Message.Body Property

Definition

Gets or sets the content of the message.

C#
[System.ComponentModel.Browsable(false)]
public object Body { get; set; }

Property Value

An object that specifies the message contents. The object can be a string, a date, a currency, a number, an array of bytes, or any managed object.

Attributes

Exceptions

The Formatter property is null.

-or-

The message queue is filtered to ignore the Body property.

Examples

The following code example sends two messages of different priorities to the queue, and retrieves them subsequently.

C#
using System;
using System.Messaging;

namespace MyProject
{

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //		
        // This example sends and receives a message from
        // a queue.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Send messages to a queue.
            myNewQueue.SendMessage(MessagePriority.Normal, "First Message Body.");
            myNewQueue.SendMessage(MessagePriority.Highest, "Second Message Body.");

            // Receive messages from a queue.
            myNewQueue.ReceiveMessage();
            myNewQueue.ReceiveMessage();

            return;
        }

        //**************************************************
        // Sends a string message to a queue.
        //**************************************************
        
        public void SendMessage(MessagePriority priority, string messageBody)
        {

            // Connect to a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            // Create a new message.
            Message myMessage = new Message();

            if(priority > MessagePriority.Normal)
            {
                myMessage.Body = "High Priority: " + messageBody;
            }
            else
            {
                myMessage.Body = messageBody;
            }

            // Set the priority of the message.
            myMessage.Priority = priority;

            // Send the Order to the queue.
            myQueue.Send(myMessage);

            return;
        }

        //**************************************************
        // Receives a message.
        //**************************************************
        
        public  void ReceiveMessage()
        {
            // Connect to the a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            // Set the queue to read the priority. By default, it
            // is not read.
            myQueue.MessageReadPropertyFilter.Priority = true;

            // Set the formatter to indicate body contains a string.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(string)});
            
            try
            {
                // Receive and format the message.
                Message myMessage =	myQueue.Receive();

                // Display message information.
                Console.WriteLine("Priority: " +
                    myMessage.Priority.ToString());
                Console.WriteLine("Body: " +
                    myMessage.Body.ToString());
            }
            
            catch (MessageQueueException)
            {
                // Handle Message Queuing exceptions.
            }

            // Handle invalid serialization format.
            catch (InvalidOperationException e)
            {
                Console.WriteLine(e.Message);
            }
            
            // Catch other exceptions as necessary.

            return;
        }
    }
}

Remarks

The message's Body property usually contains the data associated with the message. Although you can also send application-specific data in the AppSpecific and Extension properties, you should include message data in the Body of the message whenever possible. Only the Body property contents are serialized or encrypted.

The Body property can contain any object whose size does not exceed 4 MB. If you use MessageQueue.Send to send any object that is not of type Message to the MessageQueue, that object will be located in the Body property of the Message instance returned by Peek or Receive.

The string argument in MessageQueue.Send("hello.") is an example of such a generic object.

The BodyType property indicates the type of information that is stored in the message body. Message Queuing uses this information to identify the type of the Body property contents.

Specify either the Body property or the BodyStream property before sending the Message object. The Body property can be any serializable object, such as a text string, structure object, class instance, or embedded object.

Unless you write the contents of the message directly to the BodyStream property, set the Formatter property before you send the message. When the Send method is called on the MessageQueue instance, the body is serialized using the formatter contained in the Formatter property. If you send the message without specifying a value for the Formatter property, the formatter defaults to XmlMessageFormatter.

Note

Attempting to set the body of a message to MaxValue will cause a OverflowException when the Send method of the MessageQueue class is called and the ActiveXMessageFormatter is used.

Applies to

Product Versions
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

See also