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


Message Класс

Определение

Предоставляет доступ к свойствам, необходимым для определения сообщения очереди сообщений.

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.PeekMessageQueue.Receive и методы создают новый экземпляр Message класса и задают свойства экземпляра. Message Свойства класса, доступные только для чтения, применяются к получению сообщений из очереди, а свойства чтения и записи применяются к отправке и извлечению сообщений. При MessageQueue просмотре или получении сообщения из очереди его MessageReadPropertyFilter свойство определяет, какие свойства сообщения извлекаются.

Метод MessageQueue класса Send позволяет указать любой тип объекта для сообщения, отправляемого в эту очередь. Свойство экземпляра DefaultPropertiesToSend можно использовать MessageQueue для указания параметров универсальных сообщений, отправленных в очередь. Типы параметров включают форматировщик, метку, шифрование и проверку подлинности. Вы также можете указать значения для соответствующих DefaultPropertiesToSend членов, когда вы координируете приложение обмена сообщениями для реагирования на подтверждения и сообщения отчетов. Использование экземпляра Message для отправки сообщения в очередь обеспечивает гибкость доступа и изменения многих из этих свойств — либо для одного сообщения, либо на основе сообщения по сообщению. Message свойства имеют приоритет над DefaultPropertiesToSend.

Данные сообщения хранятся в Body свойстве и в меньшей степени, AppSpecific а также Extension свойства. Если данные сообщения шифруются, сериализуются или десериализируются, затрагиваются только содержимое Body свойства.

Содержимое Body свойства сериализуется при отправке сообщения с помощью указанного Formatter свойства. Сериализованное содержимое находится в свойстве BodyStream . Можно также задать BodyStream свойство напрямую, например, чтобы отправить файл в виде содержимого сообщения. Вы можете изменить или Formatter свойства Body в любое время перед отправкой сообщения, и данные будут сериализованы соответствующим образом при вызовеSend.

Свойства, определенные свойством MessageQueue.DefaultPropertiesToSend , применяются только к сообщениям, которые не относятся к типам Message. Если указать DefaultPropertiesToSend свойство для MessageQueueобъекта, то идентичные именованные свойства в экземпляре, отправляемые Message в эту очередь, вызывают пропускать эти свойства по умолчанию.

Список начальных значений свойств для экземпляра Messageсм. в конструкторе Message .

Конструкторы

Имя Описание
Message()

Инициализирует новый экземпляр Message класса пустым текстом.

Message(Object, IMessageFormatter)

Инициализирует новый экземпляр Message класса с помощью указанного модуля форматирования для сериализации указанного объекта в текст сообщения.

Message(Object)

Инициализирует новый экземпляр класса с помощью XmlMessageFormatter сериализации указанного 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)

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

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