Message Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет доступ к свойствам, необходимым для определения сообщения службы MSMQ.
public ref class Message : System::ComponentModel::Component
public class Message : System.ComponentModel.Component
type Message = class
inherit Component
Public Class Message
Inherits Component
- Наследование
Примеры
В следующем примере кода показано форматирование текста сообщения с помощью BinaryMessageFormatter.
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;
}
}
}
Imports System.Messaging
Imports System.Drawing
Imports System.IO
Namespace MyProj
_
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
'**************************************************
' 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
'**************************************************
' 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
'**************************************************
' 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
End Class
End Namespace 'MyProj
В следующем примере кода показано форматирование текста сообщения с помощью XmlMessageFormatter.
#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;
ref class Order
{
public:
int orderId;
DateTime orderTime;
};
ref 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 );
}
}
void SendMessage()
{
try
{
// 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^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Create the new order.
Message^ myMessage = gcnew Message( sentOrder );
// Send the order to the queue.
myQueue->Send( myMessage );
}
catch ( ArgumentException^ e )
{
Console::WriteLine( e->Message );
}
return;
}
void ReceiveMessage()
{
// Connect to the a queue on the local computer.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Set the formatter to indicate body contains an Order.
array<Type^>^p = gcnew array<Type^>(1);
p[ 0 ] = Order::typeid;
myQueue->Formatter = gcnew XmlMessageFormatter( p );
try
{
// Receive and format the message.
Message^ myMessage = myQueue->Receive();
Order^ myOrder = dynamic_cast<Order^>(myMessage->Body);
// Display message information.
Console::WriteLine( "Order ID: {0}", myOrder->orderId );
Console::WriteLine( "Sent: {0}", 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 = gcnew MyNewQueue;
// Create a queue on the local computer.
MyNewQueue::CreateQueue( ".\\myQueue" );
// Send a message to a queue.
myNewQueue->SendMessage();
// Receive a message from a queue.
myNewQueue->ReceiveMessage();
return 0;
}
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;
}
}
}
Imports System.Messaging
Imports System.Drawing
Imports System.IO
' 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
' Provides a container class for the example.
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
' 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
' 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
' 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(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()))
' Handle invalid serialization format.
Catch e As InvalidOperationException
Console.WriteLine(e.Message)
End Try
' Catch other exceptions as necessary.
Return
End Sub
End Class
Комментарии
Класс используется Message для просмотра или получения сообщений из очереди, а также для точного управления свойствами сообщения при отправке сообщения в очередь.
MessageQueue использует класс , Message когда он просматривает или получает сообщения из очередей, так как MessageQueue.Peek методы и MessageQueue.Receive создают новый экземпляр Message класса и задают свойства экземпляра. Message Свойства класса, доступные только для чтения, применяются к получению сообщений из очереди, а свойства чтения и записи — к отправке и извлечению сообщений. При MessageQueue просмотре или получении сообщения из очереди его MessageReadPropertyFilter свойство определяет, какие свойства сообщения извлекаются.
Метод MessageQueue класса Send позволяет указать любой тип объекта для сообщения, отправляемого в эту очередь. Свойство экземпляра DefaultPropertiesToSend можно использовать MessageQueue для указания параметров универсальных сообщений, отправляемых в очередь. К типам параметров относятся форматировщик, метка, шифрование и проверка подлинности. Вы также можете указать значения для соответствующих DefaultPropertiesToSend участников при координации приложения для обмена сообщениями для ответа на подтверждения и сообщения отчета. Использование экземпляра Message для отправки сообщения в очередь обеспечивает гибкость при доступе к многим из этих свойств и их изменении — как для одного сообщения, так и для каждого сообщения. Message свойства имеют приоритет над DefaultPropertiesToSend.
Данные сообщения хранятся в свойстве Body и, в меньшей степени, в свойствах AppSpecific и Extension . При шифровании, сериализации или десериализации данных сообщений затрагивается только содержимое Body свойства .
Содержимое Body свойства сериализуется при отправке сообщения с помощью указанного Formatter свойства. Сериализованное содержимое находится в свойстве BodyStream . Можно также задать BodyStream свойство напрямую, например, для отправки файла в качестве содержимого данных сообщения. Вы можете изменить Body свойства или Formatter в любое время перед отправкой сообщения, и данные будут сериализованы соответствующим образом при вызове Send.
Свойства, определенные свойством , MessageQueue.DefaultPropertiesToSend применяются только к сообщениям, которые не имеют типа Message. Если указать DefaultPropertiesToSend свойство для MessageQueue, свойства с одинаковыми именами в экземпляре, отправленном Message в эту очередь, игнорируют эти свойства по умолчанию.
Список начальных значений свойств для экземпляра Messageсм. в конструкторе Message .
Конструкторы
Message() |
Инициализирует новый экземпляр класса Message с пустым текстом сообщения. |
Message(Object) |
Инициализирует новый экземпляр класса Message, используя XmlMessageFormatter для сериализации заданного объекта в текст сообщения. |
Message(Object, IMessageFormatter) |
Инициализирует новый экземпляр класса Message, используя указанный модуль форматирования для сериализации заданного объекта в текст сообщения. |
Поля
InfiniteTimeout |
Указывает на отсутствие тайм-аута. |
Свойства
AcknowledgeType |
Получает или задает тип сообщения подтверждения, которое должно возвращаться приложению, передающему исходное сообщение. |
Acknowledgment |
Получает классификацию подтверждения, представляемого данным сообщением. |
AdministrationQueue |
Получает или задает очередь, принимающую подтверждающие сообщения, созданные службой очереди сообщений. |
AppSpecific |
Получает или задает дополнительные сведения, зависящие от приложения. |
ArrivedTime |
Получает время поступления сообщения в очередь местоназначения. |
AttachSenderId |
Получает или задает значение, указывающее, должен ли быть присоединен к сообщению идентификатор отправителя. |
Authenticated |
Получает значение, указывающее, прошло ли сообщение проверку подлинности. |
AuthenticationProviderName |
Получает или задает имя поставщика служб шифрования, используемого для создания цифровой подписи сообщения. |
AuthenticationProviderType |
Получает или задает тип поставщика служб шифрования, используемого для создания цифровой подписи сообщения. |
Body |
Получает или задает содержимое сообщения. |
BodyStream |
Получает или задает сведения в тексте сообщения. |
BodyType |
Получает или задает тип данных, содержащихся в тексте сообщения. |
CanRaiseEvents |
Возвращает значение, показывающее, может ли компонент вызывать событие. (Унаследовано от Component) |
ConnectorType |
Получает или задает значение, указывающее, что передающим приложением заданы некоторые свойства сообщения, обычно устанавливаемые службой очереди сообщений. |
Container |
Возвращает объект IContainer, который содержит коллекцию Component. (Унаследовано от Component) |
CorrelationId |
Получает или задает идентификатор сообщения, используемый подтверждениями, отчетами и ответными сообщениями для ссылки на исходное сообщение. |
DesignMode |
Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время. (Унаследовано от Component) |
DestinationQueue |
Получает планируемую очередь местоназначения для сообщения. |
DestinationSymmetricKey |
Получает или задает симметричный ключ, применяемый для шифрования сообщений, шифруемых приложением, или сообщений, отправляемых во внешние очереди. |
DigitalSignature |
Получает или задает цифровую подпись, используемую службой очереди сообщений при проверке подлинности сообщения. |
EncryptionAlgorithm |
Получает или задает алгоритм шифрования, используемый для шифрования тела конфиденциального сообщения. |
Events |
Возвращает список обработчиков событий, которые прикреплены к этому объекту Component. (Унаследовано от Component) |
Extension |
Получает или задает дополнительные, определяемые приложением сведения, связанные с данным сообщением. |
Formatter |
Получает или задает модуль форматирования, используемый для сериализации объекта в текст сообщения или десериализации объекта из текста сообщения. |
HashAlgorithm |
Получает или задает алгоритм хэширования, используемый службой очереди сообщений при проверке подлинности сообщения или при создании цифровой подписи для сообщения. |
Id |
Получает идентификатор сообщения. |
IsFirstInTransaction |
Получает значение, показывающее, является ли это сообщением первым переданным сообщением транзакции. |
IsLastInTransaction |
Получает значение, показывающее, является ли это сообщением последним переданным сообщением транзакции. |
Label |
Получает или задает определяемую приложением строку в кодировке Юникод, описывающую данное сообщение. |
LookupId |
Представлено в MSMQ 3.0. Получает идентификатор просмотра сообщения. |
MessageType |
Получает тип сообщения: |
Priority |
Получает или задает приоритет сообщения, используемый для определения места сообщения при его поступлении в очередь. |
Recoverable |
Получает или задает значение, показывающее, будет ли сообщение гарантированно доставлено в случае отказа компьютера или неисправности в сети. |
ResponseQueue |
Получает или задает очередь, принимающую ответные сообщения, создаваемые приложением. |
SecurityContext |
Получает или задает контекст безопасности для сообщения. |
SenderCertificate |
Получает или задает сертификат безопасности, используемый при проверке подлинности сообщений. |
SenderId |
Получает идентификатор пользователя, отправившего сообщение. |
SenderVersion |
Получает версию очереди сообщений, используемую для передачи сообщения. |
SentTime |
Получает дату и время, установленные на передающем компьютере на момент передачи данного сообщения диспетчером исходной очереди. |
Site |
Получает или задает ISite объекта Component. (Унаследовано от Component) |
SourceMachine |
Получает имя компьютера, с которого было передано данное сообщение. |
TimeToBeReceived |
Получает или задает максимальное время, в течение которого сообщение должно быть извлечено из очереди местоназначения. |
TimeToReachQueue |
Получает или задает максимальное время, в течение которого сообщение должно дойти до очереди. |
TransactionId |
Получает идентификатор транзакции, частью которой является данное сообщение. |
TransactionStatusQueue |
Получает очередь состояний транзакций на компьютере-источнике. |
UseAuthentication |
Получает или задает значение, указывающее, проводилась ли (или должна ли проводиться) проверка подлинности до отправки сообщения. |
UseDeadLetterQueue |
Получает или задает значение, указывающее, должна ли копия сообщения, которое не может быть доставлено, передаваться в очередь недоставленных сообщений. |
UseEncryption |
Получает или задает значение, определяющее, является ли сообщение конфиденциальным. |
UseJournalQueue |
Получает или задает значение, указывающее, должна ли копия сообщения храниться в журнале компьютера, являющегося источником этого сообщения. |
UseTracing |
Получает или задает значение, указывающее, нужно ли отслеживать сообщение в процессе его перемещения в очередь места назначения. |
Методы
CreateObjRef(Type) |
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
Dispose() |
Освобождает все ресурсы, занятые модулем Component. (Унаследовано от Component) |
Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые объектом Component, а при необходимости освобождает также управляемые ресурсы. (Унаследовано от Component) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetLifetimeService() |
Устаревшие..
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject) |
GetService(Type) |
Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container. (Унаследовано от Component) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
MemberwiseClone(Boolean) |
Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject) |
ToString() |
Возвращает объект String, содержащий имя Component, если оно есть. Этот метод не следует переопределять. (Унаследовано от Component) |
События
Disposed |
Возникает при удалении компонента путем вызова метода Dispose(). (Унаследовано от Component) |