This documentation is archived and is not being maintained.
Message::CreateMessage Method
Visual Studio 2010
Creates a message.
This member is overloaded. For complete information about this member, including syntax, usage, and examples, click a name in the overload list.
| Name | Description | |
|---|---|---|
|
CreateMessage(MessageVersion, String) | Creates a message that contains a version and an action. |
|
CreateMessage(MessageVersion, MessageFault, String) | Creates a message that contains a SOAP fault, a version and an action. |
|
CreateMessage(MessageVersion, String, Object) | Creates a message with the specified version, action and body. |
|
CreateMessage(MessageVersion, String, BodyWriter) | Creates a message with a body that consists of an array of bytes. |
|
CreateMessage(MessageVersion, String, XmlDictionaryReader) | Creates a message with the specified version, action and body. |
|
CreateMessage(MessageVersion, String, XmlReader) | Creates a message using the specified reader, action and version. |
|
CreateMessage(XmlDictionaryReader, Int32, MessageVersion) | Creates a message using the specified reader, action and version. |
|
CreateMessage(XmlReader, Int32, MessageVersion) | Creates a message using the specified reader, action and version. |
|
CreateMessage(MessageVersion, FaultCode, String, String) | Creates a message that contains a SOAP fault, the reason for the fault, a version and an action. |
|
CreateMessage(MessageVersion, String, Object, XmlObjectSerializer) | Creates a message using the specified version, action, message body and serializer. |
|
CreateMessage(MessageVersion, FaultCode, String, Object, String) | Creates a message that contains a SOAP fault, a reason and the detail for the fault, version and action. |
This method is used to create a new copy of a message ready for sending. This static method is used to create a new copy of message ready for sending.
When working with JSON messages use the CreateMessage(MessageVersion, String, Object, XmlObjectSerializer) method, the CreateMessage(MessageVersion, String, Object) method does not work with JSON messages.
The following code example shows a client that uses the channel factory to send a message and read the reply.
#using <System.Messaging.dll> #using <System.dll> using namespace System; using namespace System::Messaging; public ref class Order { private: int orderIdValue; private: DateTime orderTimeValue; public: property int OrderId { int get() { return orderIdValue; } void set(int value) { orderIdValue = value; } } public: property DateTime OrderTime { DateTime get() { return orderTimeValue; } void set(DateTime value) { orderTimeValue = value; } } public: Order() { } }; // Creates a new queue. void CreateQueue(String^ queuePath, bool transactional) { if(!MessageQueue::Exists(queuePath)) { MessageQueue^ queue = MessageQueue::Create(queuePath, transactional); queue->Close(); } else { Console::WriteLine("{0} already exists.", queuePath); } } // Sends an Order to a queue. void SendMessage() { // Create a new order and set values. Order^ sentOrder = gcnew Order(); sentOrder->OrderId = 3; sentOrder->OrderTime = DateTime::Now; // Connect to a queue on the local computer. MessageQueue^ queue = gcnew MessageQueue(".\\orderQueue"); // Create the new order. Message^ orderMessage = gcnew Message(sentOrder); // Set the message's TimeToReachQueue property to five minutes. orderMessage->TimeToReachQueue = TimeSpan::FromMinutes(5.0); // Display the new value of the message's TimeToReachQueue property. Console::WriteLine("Message.TimeToReachQueue: {0}", orderMessage->TimeToReachQueue.ToString()); // Set the message's TimeToBeReceived property to five minutes. orderMessage->TimeToBeReceived = TimeSpan::FromMinutes(5.0); // Display the new value of the message's TimeToBeReceived property. Console::WriteLine("Message.TimeToBeReceived: {0}", orderMessage->TimeToBeReceived.ToString()); // Set the message's UseTracing property to true. orderMessage->UseTracing = true; // Display the new value of the message's UseTracing property. Console::WriteLine("Message.UseTracing: {0}", orderMessage->UseTracing); // Set the message's Label property. orderMessage->Label = "Order Message"; // Display the new value of the message's Label property. Console::WriteLine("Message Label: {0}", orderMessage->Label); // Set the message's AttachSenderId property. orderMessage->AttachSenderId = true; // Display the new value of the message's AttachSenderId property. Console::WriteLine("Message.AttachSenderId: {0}", orderMessage->AttachSenderId); // Set the message's Recoverable property. orderMessage->Recoverable = true; // Display the new value of the message's Recoverable property. Console::WriteLine("Message.Recoverable: {0}", orderMessage->Recoverable); // Set the message's ResponseQueue property. // (You must have a connection to a queue.) orderMessage->ResponseQueue = queue; // Display the new value of the message's ResponseQueue property. Console::WriteLine("Message.ResponseQueue.QueueName: {0}", orderMessage->ResponseQueue->QueueName); // Set the message's TimeToReachQueue property to // Message.InfiniteTimeout. orderMessage->TimeToReachQueue = Message::InfiniteTimeout; // Display the new value of the message's TimeToReachQueue property. Console::WriteLine("Message.TimeToReachQueue: {0}", orderMessage->TimeToReachQueue.ToString()); // Set the message's UseDeadLetterQueue property. orderMessage->UseDeadLetterQueue = true; // Display the new value of the message's UseDeadLetterQueue property. Console::WriteLine("Message.UseDeadLetterQueue: {0}", orderMessage->UseDeadLetterQueue); // Set the message's UseJournalQueue property. orderMessage->UseJournalQueue = true; // Display the new value of the message's UseJournalQueue property. Console::WriteLine("Message.UseJournalQueue: {0}", orderMessage->UseJournalQueue); // Set the message's UseEncryption property. orderMessage->UseEncryption = true; // Display the new value of the message's UseEncryption property. Console::WriteLine("Message.UseEncryption: {0}", orderMessage->UseEncryption); // Send the order to the queue. queue->Send(orderMessage); queue->Close(); } // Receives a message containing an order. void ReceiveMessage() { // Connect to a queue on the local computer. MessageQueue^ queue = gcnew MessageQueue(".\\orderQueue"); // Set the formatter to indicate the message body contains an order. queue->Formatter = gcnew XmlMessageFormatter(gcnew array<Type^> {Order::typeid}); // Set the queue's MessageReadPropertyFilter properties to ensure that // the message includes the properties in which we are interested. queue->MessageReadPropertyFilter->ArrivedTime = true; queue->MessageReadPropertyFilter->DestinationQueue = true; queue->MessageReadPropertyFilter->SenderVersion = true; queue->MessageReadPropertyFilter->SentTime = true; queue->MessageReadPropertyFilter->SourceMachine = true; queue->MessageReadPropertyFilter->Authenticated = true; // Receive the message. Time out after ten seconds in case the message // was not delivered. Message^ orderMessage = queue->Receive(TimeSpan::FromSeconds(10.0)); // Format the message. Order^ sentOrder = (Order^)orderMessage->Body; // Display message information. Console::WriteLine("Order ID: {0}", sentOrder->OrderId.ToString()); Console::WriteLine("Sent: {0}", sentOrder->OrderTime.ToString()); // Display the value of the message's MessageType property. Console::WriteLine("Message Type: {0}", orderMessage->MessageType); // Display the value of the message's SourceMachine property. // To view this property value, the queue's // MessageReadPropertyFilter.SourceMachine property must be set to // true before the message is received. Console::WriteLine("Source Machine: {0}", orderMessage->SourceMachine); // Display the value of the message's DestinationQueue property. // To view this property value, the queue's // MessageReadPropertyFilter.DestinationQueue property must be set to // true before the message is received. Console::WriteLine("Message.DestinationQueue.QueueName: {0}", orderMessage->DestinationQueue->QueueName); // Display the value of the message's SentTime property. // To view this property value, the queue's // MessageReadPropertyFilter.SentTime property must be set to // true before the message is received. Console::WriteLine("Time sent from source queue: {0}", orderMessage->SentTime.ToString()); // Display the value of the message's ArrivedTime property. // To view this property value, the queue's // MessageReadPropertyFilter.ArrivedTime property must be set to // true before the message is received. Console::WriteLine("Time arrived in destination queue: {0}", orderMessage->ArrivedTime.ToString()); // Display the value of the message's Authenticated property. // To view this property value, the queue's // MessageReadPropertyFilter.Authenticated property must be set to // true before the message is received. Console::WriteLine("Authentication requested for this message: {0}", orderMessage->Authenticated.ToString()); // Display the value of the message's SenderVersion property. // To view this property value, the queue's // MessageReadPropertyFilter.SenderVersion property must be set to // true before the message is received. Console::WriteLine("Message.SenderVersion: {0}", orderMessage->SenderVersion); // Message Queuing sets this property when the message is sent. // Display the value of the message's BodyType property. Console::WriteLine("Message.BodyType: {0}", orderMessage->BodyType.ToString()); queue->Close(); } // Sends an Order to a transactional queue. void SendMessageToTransQueue() { // Create a new order and set values. Order^ sentOrder = gcnew Order(); sentOrder->OrderId = 3; sentOrder->OrderTime = DateTime::Now; // Connect to a queue on the local computer. MessageQueue^ queue = gcnew MessageQueue(".\\orderTransQueue"); // Create the new order. Message^ orderMessage = gcnew Message(sentOrder); // Create a message queuing transaction. MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction(); try { // Begin a transaction. transaction->Begin(); // Send the order to the queue. queue->Send(orderMessage, transaction); // Commit the transaction. transaction->Commit(); } catch (MessageQueueException^ ex) { // Abort the transaction. transaction->Abort(); // Propagate the exception. throw; } finally { // Dispose of the transaction object. delete transaction; queue->Close(); } } // Receives a message containing an order. void ReceiveMessageFromTransQueue() { Message^ orderMessage; // Connect to the a queue on the local computer. MessageQueue^ queue = gcnew MessageQueue(".\\orderTransQueue"); // Set the formatter to indicate the message body contains an order. queue->Formatter = gcnew XmlMessageFormatter(gcnew array<Type^> {Order::typeid}); // Set the queue's MessageReadPropertyFilter properties to ensure that // the message includes the properties in which we are interested. queue->MessageReadPropertyFilter->TransactionId = true; queue->MessageReadPropertyFilter->TransactionStatusQueue = true; queue->MessageReadPropertyFilter->IsFirstInTransaction = true; queue->MessageReadPropertyFilter->IsLastInTransaction = true; // Create a message queuing transaction. MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction(); try { // Begin a transaction. transaction->Begin(); // Receive the message. Time out after ten seconds in case the // message was not delivered. orderMessage = queue->Receive(TimeSpan::FromSeconds(10.0), transaction); // Commit the transaction. transaction->Commit(); } catch (MessageQueueException^ ex) { // Abort the transaction. transaction->Abort(); // Propagate the exception. throw; } finally { // Dispose of the transaction object. delete transaction; queue->Close(); } // Message Queuing sets this property when the message is sent. // Display the value of the message's TransactionStatusQueue property. // To view this property value, the queue's // MessageReadPropertyFilter.TransactionStatusQueue property must be // set to true before the message is received. Console::WriteLine("Message.TransactionStatusQueue.QueueName: {0}", orderMessage->TransactionStatusQueue->QueueName); // Display the value of the message's TransactionId property. // To view this property value, the queue's // MessageReadPropertyFilter.TransactionId property must be set to true // before the message is received. Console::WriteLine("Message.TransactionId: {0}", orderMessage->TransactionId); // Display the value of the message's IsFirstInTransaction property. // To view this property value, the queue's // MessageReadPropertyFilter.IsFirstInTransaction property must be set // to true before the message is received. Console::WriteLine("Message.IsFirstInTransaction: {0}", orderMessage->IsFirstInTransaction); // Display the value of the message's IsLastInTransaction property. // To view this property value, the queue's // MessageReadPropertyFilter.IsLastInTransaction property must be set // to true before the message is received. Console::WriteLine("Message.IsLastInTransaction: {0}", orderMessage->IsLastInTransaction); } int main() { try { // Create a non-transactional queue on the local computer. // Note that the queue might not be immediately accessible, and // therefore this example might throw an exception of type // System.Messaging.MessageQueueException when trying to send a // message to the newly created queue. CreateQueue(".\\orderQueue", false); // Send a message to a queue. SendMessage(); // Receive a message from a queue. ReceiveMessage(); // Create a transactional queue on the local computer. CreateQueue(".\\orderTransQueue", true); // Send a message to a transactional queue. SendMessageToTransQueue(); // Receive a message from a transactional queue. ReceiveMessageFromTransQueue(); } catch (InvalidOperationException^) { Console::WriteLine("Please install Message Queuing."); } catch (MessageQueueException^ ex) { // Write the exception information to the console. Console::WriteLine(ex); } }
Show: