Compartir por


Message Clase

Definición

Proporciona acceso a las propiedades necesarias para definir un mensaje Message Queuing.

public ref class Message : System::ComponentModel::Component
public class Message : System.ComponentModel.Component
type Message = class
    inherit Component
Public Class Message
Inherits Component
Herencia

Ejemplos

En el ejemplo de código siguiente se muestra cómo dar formato a un cuerpo del mensaje mediante 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

En el ejemplo de código siguiente se muestra cómo dar formato a un cuerpo del mensaje mediante 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

Comentarios

Use la Message clase para ver o recibir mensajes de una cola, o para tener un control preciso sobre las propiedades del mensaje al enviar un mensaje a una cola.

MessageQueue usa la Message clase cuando inspecciona o recibe mensajes de colas, ya que los MessageQueue.Peek métodos y MessageQueue.Receive crean una nueva instancia de la Message clase y establecen las propiedades de la instancia. Las Message propiedades de solo lectura de la clase se aplican a la recuperación de mensajes de una cola, mientras que las propiedades de lectura y escritura se aplican al envío y recuperación de mensajes. Cuando MessageQueue busca o recibe un mensaje de una cola, su MessageReadPropertyFilter propiedad determina cuáles de las propiedades del mensaje se recuperan.

El método de la MessageQueueSend clase permite especificar cualquier tipo de objeto para un mensaje que se envía a esa cola. Puede usar la propiedad de DefaultPropertiesToSend la MessageQueue instancia para especificar la configuración de los mensajes genéricos enviados a la cola. Los tipos de configuración incluyen formateador, etiqueta, cifrado y autenticación. También puede especificar valores para los miembros adecuados DefaultPropertiesToSend al coordinar la aplicación de mensajería para responder a los mensajes de confirmación e informe. El uso de una Message instancia de para enviar un mensaje a la cola proporciona la flexibilidad de acceder a muchas de estas propiedades y modificarlas, ya sea para un solo mensaje o por mensaje. Message las propiedades tienen prioridad sobre DefaultPropertiesToSend.

Los datos del mensaje se almacenan en la Body propiedad y, en menor medida, las AppSpecific propiedades y Extension . Cuando los datos del mensaje se cifran, serializan o deserializan, solo se ve afectado el contenido de la Body propiedad.

El contenido de la Body propiedad se serializa cuando se envía el mensaje mediante la Formatter propiedad que especifique. El contenido serializado se encuentra en la BodyStream propiedad . También puede establecer la BodyStream propiedad directamente, por ejemplo, para enviar un archivo como contenido de datos de un mensaje. Puede cambiar las Body propiedades o Formatter en cualquier momento antes de enviar el mensaje y los datos se serializarán correctamente cuando llame a Send.

Las propiedades definidas por la MessageQueue.DefaultPropertiesToSend propiedad solo se aplican a los mensajes que no son de tipo Message. Si especifica la DefaultPropertiesToSend propiedad para , MessageQueuelas propiedades con nombre idéntico de una Message instancia enviada a esa cola hacen que se omitan estas propiedades predeterminadas.

Para obtener una lista de valores de propiedad iniciales para una instancia de Message, vea el Message constructor .

Constructores

Nombre Description
Message()

Inicializa una nueva instancia de la Message clase con un cuerpo vacío.

Message(Object, IMessageFormatter)

Inicializa una nueva instancia de la Message clase utilizando el formateador especificado para serializar el objeto especificado en el cuerpo del mensaje.

Message(Object)

Inicializa una nueva instancia de la Message clase utilizando para XmlMessageFormatter serializar el objeto especificado en el cuerpo del mensaje.

Campos

Nombre Description
InfiniteTimeout

Especifica que no existe ningún tiempo de espera.

Propiedades

Nombre Description
AcknowledgeType

Obtiene o establece el tipo de mensaje de confirmación que se va a devolver a la aplicación de envío.

Acknowledgment

Obtiene la clasificación de confirmación de que este mensaje representa.

AdministrationQueue

Obtiene o establece la cola que recibe los mensajes de confirmación que genera Message Queuing.

AppSpecific

Obtiene o establece información adicional específica de la aplicación.

ArrivedTime

Obtiene la hora a la que llegó el mensaje en la cola de destino.

AttachSenderId

Obtiene o establece un valor que indica si el identificador del remitente debe adjuntarse al mensaje.

Authenticated

Obtiene un valor que indica si el mensaje se ha autenticado.

AuthenticationProviderName

Obtiene o establece el nombre del proveedor criptográfico utilizado para generar la firma digital del mensaje.

AuthenticationProviderType

Obtiene o establece el tipo de proveedor criptográfico utilizado para generar la firma digital del mensaje.

Body

Obtiene o establece el contenido del mensaje.

BodyStream

Obtiene o establece la información en el cuerpo del mensaje.

BodyType

Obtiene o establece el tipo de datos que contiene el cuerpo del mensaje.

CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.

(Heredado de Component)
ConnectorType

Obtiene o establece un valor que indica que la aplicación de envío estableció normalmente algunas propiedades de mensaje establecidas por Message Queuing.

Container

Obtiene el IContainer objeto que contiene el Componentobjeto .

(Heredado de Component)
CorrelationId

Obtiene o establece el identificador de mensaje utilizado por la confirmación, el informe y los mensajes de respuesta para hacer referencia al mensaje original.

DesignMode

Obtiene un valor que indica si Component el objeto está actualmente en modo de diseño.

(Heredado de Component)
DestinationQueue

Obtiene la cola de destino deseada para un mensaje.

DestinationSymmetricKey

Obtiene o establece la clave simétrica utilizada para cifrar los mensajes cifrados por la aplicación o los mensajes enviados a colas externas.

DigitalSignature

Obtiene o establece la firma digital que Message Queuing usa para autenticar el mensaje.

EncryptionAlgorithm

Obtiene o establece el algoritmo de cifrado utilizado para cifrar el cuerpo de un mensaje privado.

Events

Obtiene la lista de controladores de eventos que están asociados a este Componentobjeto .

(Heredado de Component)
Extension

Obtiene o establece información adicional definida por la aplicación asociada al mensaje.

Formatter

Obtiene o establece el formateador usado para serializar un objeto en o deserializar un objeto del cuerpo del mensaje.

HashAlgorithm

Obtiene o establece el algoritmo hash que Message Queuing usa al autenticar un mensaje o crear una firma digital para un mensaje.

Id

Obtiene el identificador del mensaje.

IsFirstInTransaction

Obtiene un valor que indica si el mensaje era el primer mensaje enviado en una transacción.

IsLastInTransaction

Obtiene un valor que indica si el mensaje era el último mensaje enviado en una transacción.

Label

Obtiene o establece una cadena Unicode definida por la aplicación que describe el mensaje.

LookupId

Se introdujo en MSMQ 3.0. Obtiene el identificador de búsqueda del mensaje.

MessageType

Obtiene el tipo de mensaje: Normal, Acknowledgmento Report.

Priority

Obtiene o establece la prioridad del mensaje, que determina dónde se coloca el mensaje en la cola.

Recoverable

Obtiene o establece un valor que indica si se garantiza que el mensaje se entregue en caso de un error del equipo o un problema de red.

ResponseQueue

Obtiene o establece la cola que recibe mensajes de respuesta generados por la aplicación.

SecurityContext

Obtiene o establece el contexto de seguridad de un mensaje.

SenderCertificate

Obtiene o establece el certificado de seguridad usado para autenticar mensajes.

SenderId

Obtiene el identificador del usuario que envía.

SenderVersion

Obtiene la versión de Message Queuing usada para enviar el mensaje.

SentTime

Obtiene la fecha y hora en el equipo que envía el mensaje el administrador de colas de origen.

Site

Obtiene o establece el ISite objeto de .Component

(Heredado de Component)
SourceMachine

Obtiene el equipo desde el que se originó el mensaje.

TimeToBeReceived

Obtiene o establece la cantidad máxima de tiempo para que el mensaje se reciba de la cola de destino.

TimeToReachQueue

Obtiene o establece la cantidad máxima de tiempo para que el mensaje llegue a la cola.

TransactionId

Obtiene el identificador de la transacción de la que el mensaje era parte.

TransactionStatusQueue

Obtiene la cola de estado de transacción en el equipo de origen.

UseAuthentication

Obtiene o establece un valor que indica si el mensaje se autenticó (o debe ser) antes de enviarse.

UseDeadLetterQueue

Obtiene o establece un valor que indica si se debe enviar una copia del mensaje que no se pudo entregar a una cola de mensajes fallidos.

UseEncryption

Obtiene o establece un valor que indica si se va a privado el mensaje.

UseJournalQueue

Obtiene o establece un valor que indica si se debe mantener una copia del mensaje en un diario de máquina en el equipo de origen.

UseTracing

Obtiene o establece un valor que indica si se va a realizar un seguimiento de un mensaje a medida que se mueve hacia su cola de destino.

Métodos

Nombre Description
CreateObjRef(Type)

Crea un objeto que contiene toda la información pertinente necesaria para generar un proxy usado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
Dispose()

Libera todos los recursos usados por .Component

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados utilizados por Component y, opcionalmente, libera los recursos administrados.

(Heredado de Component)
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetService(Type)

Devuelve un objeto que representa un servicio proporcionado por Component o por su Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto actual MarshalByRefObject .

(Heredado de MarshalByRefObject)
ToString()

Devuelve un String objeto que contiene el nombre de Component, si existe. Este método no se debe invalidar.

(Heredado de Component)

Eventos

Nombre Description
Disposed

Se produce cuando el componente se elimina mediante una llamada al Dispose() método .

(Heredado de Component)

Se aplica a

Consulte también