Поделиться через


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

Получает тип сообщения: Normal, Acknowledgment или Report.

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)

Применяется к

См. также раздел