Cómo crear a un formateador de mensaje personalizado utilizando Visual C#

Este artículo hace referencia al siguiente espacio de nombres de biblioteca de clases de Microsoft.NET Framework:
  • System.Messaging

EN ESTA TAREA

Resumen

En este artículo paso a paso se muestra cómo utilizar Visual C# para crear a un formateador de mensaje personalizado simple.


El espacio de nombres System.Messaging proporciona clases que permiten conectarse a colas de mensajes, enviar mensajes y recibir o buscar mensajes de las colas. Cuando envía un mensaje a la cola, el formateador del mensaje en el cuerpo del mensaje se serializan los objetos. El espacio de nombres System.Messaging incluye a los tres formateadores siguientes:

  • XmlMessageFormatter (valor predeterminado)
  • BinaryMessageFormatter
  • ActiveXMessageFormatter
En determinadas situaciones, debe desarrollar a un formateador de mensaje personalizado que se puede serializar cadenas en el cuerpo del mensaje y deserializar las cadenas cuando se leen mensajes de la cola.

Para crear a un formateador de mensaje personalizado, debe implementar la interfaz IMessageFormatter , que está incluida en el espacio de nombres System.Messaging . Esta interfaz especifica los tres métodos siguientes:

  • Escritura
  • Lectura
  • CanRead
Dado que esta interfaz implementa la interfaz ICloneable , también debe implementar el método Clone .

Declaración de clase

En este ejemplo, la clase de formateador se llama MyFormattery se declara del siguiente modo:
using System;using System.IO;
using System.Text;
using System.Messaging;

public class MyFormatter : IMessageFormatter
{

public MyFormatter()
{
//The constructor can remain empty.
}
}

Tenga en cuenta que es necesaria una referencia de proyecto a System.Messaging.DLL . Para agregar esta referencia en Visual Studio .NET, haga clic en referencias y seleccione Agregar referencia.

Método de escritura

El método Write serializa los objetos en el cuerpo del mensaje cuando se envía el mensaje a la cola. En este ejemplo, el formateador acepta una cadena y serializa utilizando la codificación UTF8. El método Write se implementa de la siguiente manera:
public void Write (System.Messaging.Message msg, object obj){
//Declare a buffer.
byte[] buff;

//Place the string into the buffer using UTF8 encoding.
buff = Encoding.UTF8.GetBytes (obj.ToString());

//Create a new MemoryStream object passing the buffer.
Stream stm = new MemoryStream(buff);

//Assign the stream to the message's BodyStream property.
msg.BodyStream = stm;
}

Método Read

El método Read deserializa el cuerpo del mensaje cuando se lee o peek el mensaje de la cola. Básicamente, el método Read invierte el proceso que se realiza con el método Write .
public object Read (System.Messaging.Message msg){
//Obtain the BodyStream for the message.
Stream stm = msg.BodyStream;

//Create a StreamReader object used for reading from the stream.
StreamReader reader = new StreamReader (stm);

//Return the string read from the stream.
//StreamReader.ReadToEnd returns a string.
return reader.ReadToEnd();
}

Método CanRead

El método CanRead intenta determinar si el formateador puede controlar el mensaje que se pasa a ella. Para mayor brevedad, este formateador se supone que el cuerpo del mensaje es una cadena (todos los mensajes de la cola se han enviado mediante este formateador) y devuelve el valor True.
public bool CanRead (System.Messaging.Message msg){
return true;
}

Método Clone

El método Clone devuelve una nueva instancia del formateador.
public object Clone(){
return new MyFormatter();
}

Utilizar el formateador

Una vez implementado el formateador, puede establecer la propiedad Formatter del objeto MessageQueue en una nueva instancia de esta clase de formato, como sigue:
//Open an existing public queue called Test.MessageQueue msgQueue = new MessageQueue (@".\test");
//Set the Formatter property.
msgQueue.Formatter = new MyFormatter();
//Send a test message.
msgQueue.Send ("Test string message");

Propiedades

Id. de artículo: 310683 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios