Message Class
Provides access to the properties needed to define a Message Queuing message.
For a list of all members of this type, see Message Members.
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Messaging.Message
[Visual Basic] Public Class Message Inherits Component [C#] public class Message : Component [C++] public __gc class Message : public Component [JScript] public class Message extends Component
Thread Safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Remarks
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.
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.
Example
[Visual Basic, C#, C++] The following example demonstrates formatting a message body using BinaryMessageFormatter.
[Visual Basic] Imports System Imports System.Messaging Imports System.Drawing Imports System.IO 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 Shared Sub Main() ' Create a new instance of the class. Dim myNewQueue As New MyNewQueue() ' Create a queue on the local computer. CreateQueue(".\myQueue") ' Send a message to a queue. myNewQueue.SendMessage() ' Receive a message from a queue. myNewQueue.ReceiveMessage() Return End Sub 'Main '************************************************** ' Creates a new queue. '************************************************** Public Shared Sub CreateQueue(queuePath As String) Try If Not MessageQueue.Exists(queuePath) Then MessageQueue.Create(queuePath) Else Console.WriteLine((queuePath + " already exists.")) End If Catch e As MessageQueueException Console.WriteLine(e.Message) End Try End Sub 'CreateQueue '************************************************** ' Sends an image to a queue, using the BinaryMessageFormatter. '************************************************** Public Sub SendMessage() Try ' Create a new bitmap. ' The file must be in the \bin\debug or \bin\retail folder, or ' you must give a full path to its location. Dim myImage As Image = Bitmap.FromFile("SentImage.bmp") ' Connect to a queue on the local computer. Dim myQueue As New MessageQueue(".\myQueue") Dim myMessage As New Message(myImage, New BinaryMessageFormatter()) ' Send the image to the queue. myQueue.Send(myMessage) Catch e As ArgumentException Console.WriteLine(e.Message) End Try Return End Sub 'SendMessage '************************************************** ' Receives a message containing an image. '************************************************** Public Sub ReceiveMessage() Try ' Connect to the a queue on the local computer. Dim myQueue As New MessageQueue(".\myQueue") ' Set the formatter to indicate body contains an Order. myQueue.Formatter = New BinaryMessageFormatter() ' Receive and format the message. Dim myMessage As System.Messaging.Message = myQueue.Receive() Dim myImage As Bitmap = CType(myMessage.Body, Bitmap) ' This will be saved in the \bin\debug or \bin\retail folder. myImage.Save("ReceivedImage.bmp", System.Drawing.Imaging.ImageFormat.Bmp) Catch ' Handle Message Queuing exceptions. ' Handle invalid serialization format. Catch e As InvalidOperationException Console.WriteLine(e.Message) Catch e As IOException End Try ' Handle file access exceptions. ' Catch other exceptions as necessary. Return End Sub 'ReceiveMessage End Class 'MyNewQueue End Namespace 'MyProject [C#] using System; using System.Messaging; using System.Drawing; using System.IO; 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(); // Create a queue on the local computer. CreateQueue(".\\myQueue"); // Send a message to a queue. myNewQueue.SendMessage(); // Receive a message from a queue. myNewQueue.ReceiveMessage(); return; } //************************************************** // Creates a new queue. //************************************************** public static void CreateQueue(string queuePath) { try { if(!MessageQueue.Exists(queuePath)) { MessageQueue.Create(queuePath); } else { Console.WriteLine(queuePath + " already exists."); } } catch (MessageQueueException e) { Console.WriteLine(e.Message); } } //************************************************** // Sends an image to a queue, using the BinaryMessageFormatter. //************************************************** public void SendMessage() { try{ // Create a new bitmap. // The file must be in the \bin\debug or \bin\retail folder, or // you must give a full path to its location. Image myImage = Bitmap.FromFile("SentImage.bmp"); // Connect to a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); Message myMessage = new Message(myImage, new BinaryMessageFormatter()); // Send the image to the queue. myQueue.Send(myMessage); } catch(ArgumentException e) { Console.WriteLine(e.Message); } return; } //************************************************** // Receives a message containing an image. //************************************************** public void ReceiveMessage() { try { // Connect to the a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); // Set the formatter to indicate body contains an Order. myQueue.Formatter = new BinaryMessageFormatter(); // Receive and format the message. System.Messaging.Message myMessage = myQueue.Receive(); Bitmap myImage = (Bitmap)myMessage.Body; // This will be saved in the \bin\debug or \bin\retail folder. myImage.Save("ReceivedImage.bmp",System.Drawing.Imaging.ImageFormat.Bmp); } catch (MessageQueueException) { // Handle Message Queuing exceptions. } // Handle invalid serialization format. catch (InvalidOperationException e) { Console.WriteLine(e.Message); } catch (IOException e) { // Handle file access exceptions. } // Catch other exceptions as necessary. return; } } } [C++] #using <mscorlib.dll> #using <system.dll> #using <system.messaging.dll> #using <system.drawing.dll> using namespace System; using namespace System::Messaging; using namespace System::Drawing; using namespace System::IO; /// <summary> /// Provides a container class for the example. /// </summary> __gc class MyNewQueue { //************************************************* // Creates a new queue. //************************************************* public: static void CreateQueue(String* queuePath) { try { if (!MessageQueue::Exists(queuePath)) { MessageQueue::Create(queuePath); } else { Console::WriteLine("{0} already exists.", queuePath); } } catch (MessageQueueException* e) { Console::WriteLine(e->Message); } } //************************************************* // Sends an image to a queue, using the BinaryMessageFormatter. //************************************************* public: void SendMessage() { try { // Create a new bitmap. // The file must be in the \bin\debug or \bin\retail folder, or // you must give a full path to its location. Image* myImage = Bitmap::FromFile(S"SentImage::bmp"); // Connect to a queue on the local computer. MessageQueue* myQueue = new MessageQueue(S".\\myQueue"); Message* myMessage = new Message(myImage, new BinaryMessageFormatter()); // Send the image to the queue. myQueue->Send(myMessage); } catch (ArgumentException* e) { Console::WriteLine(e->Message); } return; } //************************************************* // Receives a message containing an image. //************************************************* public: void ReceiveMessage() { try { // Connect to the a queue on the local computer. MessageQueue* myQueue = new MessageQueue(S".\\myQueue"); // Set the formatter to indicate body contains an Order. myQueue->Formatter = new BinaryMessageFormatter(); // Receive and format the message. Message* myMessage = myQueue->Receive(); Bitmap* myImage = static_cast<Bitmap*>(myMessage->Body); // This will be saved in the \bin\debug or \bin\retail folder. myImage->Save(S"ReceivedImage::bmp", System::Drawing::Imaging::ImageFormat::Bmp); } catch (MessageQueueException*) { // Handle Message Queuing exceptions. } // Handle invalid serialization format. catch (InvalidOperationException* e) { Console::WriteLine(e->Message); } catch (IOException* e) { // Handle file access exceptions. } // Catch other exceptions as necessary. return; } }; //************************************************* // Provides an entry point into the application. // // This example sends and receives a message from // a queue. //************************************************* int main() { // Create a new instance of the class. MyNewQueue* myNewQueue = new MyNewQueue(); // Create a queue on the local computer. MyNewQueue::CreateQueue(S".\\myQueue"); // Send a message to a queue. myNewQueue->SendMessage(); // Receive a message from a queue. myNewQueue->ReceiveMessage(); return 0; }
[Visual Basic, C#, C++] The following example demonstrates formatting a message body using XmlMessageFormatter.
[Visual Basic] Imports System Imports System.Messaging Imports System.Drawing Imports System.IO Namespace MyProject _ ' The following example ' sends to a queue and receives from a queue. Public Class Order Public orderId As Integer Public orderTime As DateTime End Class 'Order _ '/ <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 Shared Sub Main() ' Create a new instance of the class. Dim myNewQueue As New MyNewQueue() ' Create a queue on the local computer. CreateQueue(".\myQueue") ' Send a message to a queue. myNewQueue.SendMessage() ' Receive a message from a queue. myNewQueue.ReceiveMessage() Return End Sub 'Main '************************************************** ' Creates a new queue. '************************************************** Public Shared Sub CreateQueue(queuePath As String) Try If Not MessageQueue.Exists(queuePath) Then MessageQueue.Create(queuePath) Else Console.WriteLine((queuePath + " already exists.")) End If Catch e As MessageQueueException Console.WriteLine(e.Message) End Try End Sub 'CreateQueue '************************************************** ' Sends an Order to a queue. '************************************************** Public Sub SendMessage() Try ' Create a new order and set values. Dim sentOrder As New Order() sentOrder.orderId = 3 sentOrder.orderTime = DateTime.Now ' Connect to a queue on the local computer. Dim myQueue As New MessageQueue(".\myQueue") ' Create the new order. Dim myMessage As New Message(sentOrder) ' Send the order to the queue. myQueue.Send(myMessage) Catch e As ArgumentException Console.WriteLine(e.Message) End Try Return End Sub 'SendMessage '************************************************** ' Receives a message containing an order. '************************************************** Public Sub ReceiveMessage() ' Connect to the a queue on the local computer. Dim myQueue As New MessageQueue(".\myQueue") ' Set the formatter to indicate body contains an Order. myQueue.Formatter = New XmlMessageFormatter(New Type() {GetType(MyProject.Order)}) Try ' Receive and format the message. Dim myMessage As Message = myQueue.Receive() Dim myOrder As Order = CType(myMessage.Body, Order) ' Display message information. Console.WriteLine(("Order ID: " + myOrder.orderId.ToString())) Console.WriteLine(("Sent: " + myOrder.orderTime.ToString())) Catch ' Handle Message Queuing exceptions. ' Handle invalid serialization format. Catch e As InvalidOperationException Console.WriteLine(e.Message) End Try ' Catch other exceptions as necessary. Return End Sub 'ReceiveMessage End Class 'MyNewQueue End Namespace 'MyProject [C#] using System; using System.Messaging; using System.Drawing; using System.IO; namespace MyProject { // The following example // sends to a queue and receives from a queue. public class Order { public int orderId; public DateTime orderTime; }; /// <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(); // Create a queue on the local computer. CreateQueue(".\\myQueue"); // Send a message to a queue. myNewQueue.SendMessage(); // Receive a message from a queue. myNewQueue.ReceiveMessage(); return; } //************************************************** // Creates a new queue. //************************************************** public static void CreateQueue(string queuePath) { try { if(!MessageQueue.Exists(queuePath)) { MessageQueue.Create(queuePath); } else { Console.WriteLine(queuePath + " already exists."); } } catch (MessageQueueException e) { Console.WriteLine(e.Message); } } //************************************************** // Sends an Order to a queue. //************************************************** public void SendMessage() { try { // Create a new order and set values. Order sentOrder = new Order(); sentOrder.orderId = 3; sentOrder.orderTime = DateTime.Now; // Connect to a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); // Create the new order. Message myMessage = new Message(sentOrder); // Send the order to the queue. myQueue.Send(myMessage); } catch(ArgumentException e) { Console.WriteLine(e.Message); } return; } //************************************************** // Receives a message containing an order. //************************************************** public void ReceiveMessage() { // Connect to the a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); // Set the formatter to indicate body contains an Order. myQueue.Formatter = new XmlMessageFormatter(new Type[] {typeof(MyProject.Order)}); try { // Receive and format the message. Message myMessage = myQueue.Receive(); Order myOrder = (Order)myMessage.Body; // Display message information. Console.WriteLine("Order ID: " + myOrder.orderId.ToString()); Console.WriteLine("Sent: " + myOrder.orderTime.ToString()); } catch (MessageQueueException) { // Handle Message Queuing exceptions. } // Handle invalid serialization format. catch (InvalidOperationException e) { Console.WriteLine(e.Message); } // Catch other exceptions as necessary. return; } } } [C++] #using <mscorlib.dll> #using <system.dll> #using <system.messaging.dll> #using <system.drawing.dll> using namespace System; using namespace System::Messaging; using namespace System::Drawing; using namespace System::IO; __gc class Order { public: int orderId; public: DateTime orderTime; }; __gc class MyNewQueue { public: static void CreateQueue(String* queuePath) { try { if (!MessageQueue::Exists(queuePath)) { MessageQueue::Create(queuePath); } else { Console::WriteLine("{0} already exists.", queuePath ); } } catch (MessageQueueException* e) { Console::WriteLine(e->Message); } } public: void SendMessage() { try { // Create a new order and set values. Order* sentOrder = new Order(); sentOrder->orderId = 3; sentOrder->orderTime = DateTime::Now; // Connect to a queue on the local computer. MessageQueue* myQueue = new MessageQueue(S".\\myQueue"); // Create the new order. Message* myMessage = new Message(sentOrder); // Send the order to the queue. myQueue->Send(myMessage); } catch (ArgumentException* e) { Console::WriteLine(e->Message); } return; } public: void ReceiveMessage() { // Connect to the a queue on the local computer. MessageQueue* myQueue = new MessageQueue(S".\\myQueue"); // Set the formatter to indicate body contains an Order. Type* p __gc[] = new Type*[1]; p[0] = __typeof(Order); myQueue->Formatter = new XmlMessageFormatter( p ); try { // Receive and format the message. Message* myMessage = myQueue->Receive(); Order* myOrder = dynamic_cast<Order*>(myMessage->Body); // Display message information. Console::WriteLine(S"Order ID: {0}", __box(myOrder->orderId)); Console::WriteLine(S"Sent: {0}", __box(myOrder->orderTime)); } catch (MessageQueueException*) { // Handle Message Queuing exceptions. } // Handle invalid serialization format. catch (InvalidOperationException* e) { Console::WriteLine(e->Message); } // Catch other exceptions as necessary. return; } }; int main() { // Create a new instance of the class. MyNewQueue* myNewQueue = new MyNewQueue(); // Create a queue on the local computer. MyNewQueue::CreateQueue(S".\\myQueue"); // Send a message to a queue. myNewQueue->SendMessage(); // Receive a message from a queue. myNewQueue->ReceiveMessage(); return 0; }
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Namespace: System.Messaging
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
Assembly: System.Messaging (in System.Messaging.dll)
See Also
Message Members | System.Messaging Namespace | MessageQueue | DefaultPropertiesToSend | Send | Receive | Peek