MessageEncoder Clase

Definición

El codificador es el componente que se utiliza para escribir los mensajes en una secuencia y leerlos de una secuencia.

public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public MustInherit Class MessageEncoder
Herencia
MessageEncoder

Ejemplos

El ejemplo de código siguiente muestra un ejemplo de una clase derivada de MessageEncoder.

public class CustomTextMessageEncoder : MessageEncoder
{
    private CustomTextMessageEncoderFactory factory;
    private XmlWriterSettings writerSettings;
    private string contentType;

    public CustomTextMessageEncoder(CustomTextMessageEncoderFactory factory)
    {
        this.factory = factory;

        this.writerSettings = new XmlWriterSettings();
        this.writerSettings.Encoding = Encoding.GetEncoding(factory.CharSet);
        this.contentType = string.Format("{0}; charset={1}",
            this.factory.MediaType, this.writerSettings.Encoding.HeaderName);
    }

    public override string ContentType
    {
        get
        {
            return this.contentType;
        }
    }

    public override string MediaType
    {
        get
        {
            return factory.MediaType;
        }
    }

    public override MessageVersion MessageVersion
    {
        get
        {
            return this.factory.MessageVersion;
        }
    }

    public override bool IsContentTypeSupported(string contentType)
    {
        if (base.IsContentTypeSupported(contentType))
        {
            return true;
        }
        if (contentType.Length == this.MediaType.Length)
        {
            return contentType.Equals(this.MediaType, StringComparison.OrdinalIgnoreCase);
        }
        else
        {
            if (contentType.StartsWith(this.MediaType, StringComparison.OrdinalIgnoreCase)
                && (contentType[this.MediaType.Length] == ';'))
            {
                return true;
            }
        }
        return false;
    }

    public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
    {
        byte[] msgContents = new byte[buffer.Count];
        Array.Copy(buffer.Array, buffer.Offset, msgContents, 0, msgContents.Length);
        bufferManager.ReturnBuffer(buffer.Array);

        MemoryStream stream = new MemoryStream(msgContents);
        return ReadMessage(stream, int.MaxValue);
    }

    public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
    {
        XmlReader reader = XmlReader.Create(stream);
        return Message.CreateMessage(reader, maxSizeOfHeaders, this.MessageVersion);
    }

    public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
    {
        MemoryStream stream = new MemoryStream();
        XmlWriter writer = XmlWriter.Create(stream, this.writerSettings);
        message.WriteMessage(writer);
        writer.Close();

        byte[] messageBytes = stream.GetBuffer();
        int messageLength = (int)stream.Position;
        stream.Close();

        int totalLength = messageLength + messageOffset;
        byte[] totalBytes = bufferManager.TakeBuffer(totalLength);
        Array.Copy(messageBytes, 0, totalBytes, messageOffset, messageLength);

        ArraySegment<byte> byteArray = new ArraySegment<byte>(totalBytes, messageOffset, messageLength);
        return byteArray;
    }

    public override void WriteMessage(Message message, Stream stream)
    {
        XmlWriter writer = XmlWriter.Create(stream, this.writerSettings);
        message.WriteMessage(writer);
        writer.Close();
    }

Comentarios

MessageEncoder es una clase base que proporciona implementaciones que admiten un tipo de contenido y una versión de mensaje de Extensiones de correo de Internet (MIME) multipropósito, y define la interfaz para la serialización y deserialización de mensajes según ese tipo de contenido. Utilícelo como clase base para escribir su propio codificador personalizado.

Utilice esta clase si desea implementar un codificador del mensaje personalizado. Para implementar su propio codificador de mensajes personalizado, debe proporcionar implementaciones personalizadas de las siguientes tres clases base abstractas:

Invalide Encoder para devolver una instancia de su MessageEncoder personalizado. A continuación, conecte su MessageEncoderFactory personalizado a la pila del elemento de enlace que se usa para configurar el servicio o el cliente invalidando el método CreateMessageEncoderFactory para devolver una instancia de este generador.

La tarea de convertir entre la representación en memoria de un mensaje y una representación de un conjunto de información XML (Infoset) que se puede escribir en una secuencia se encapsula dentro de la clase MessageEncoder, que normalmente actúa como un generador para los lectores XML y los escritores XML que admiten tipos específicos de codificaciones de XML.

Los métodos clave de MessageEncoder son WriteMessage y ReadMessage. WriteMessage toma un objeto Message y lo escribe en un objeto Stream. ReadMessage toma un Stream objeto y un tamaño máximo de encabezado y devuelve un Message objeto .

Constructores

MessageEncoder()

Inicializa una nueva instancia de la clase MessageEncoder.

Propiedades

ContentType

Cuando se invalida en una clase derivada, obtiene el tipo de contenido de MIME que usa el codificador.

MediaType

Cuando se invalida en una clase derivada, obtiene el valor del tipo de medio que usa el codificador.

MessageVersion

Cuando se invalida en una clase derivada, obtiene el valor de la versión de los mensajes que utiliza el codificador.

Métodos

BeginWriteMessage(Message, Stream, AsyncCallback, Object)

Inicia la escritura de mensajes para el codificador de mensajes con el mensaje, la secuencia, la devolución de llamada y el estado especificados.

EndWriteMessage(IAsyncResult)

Finaliza la escritura de los mensajes para el codificador de mensajes.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetProperty<T>()

Devuelve un objeto escrito solicitado de la capa adecuada en la pila del canal si está presente.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsContentTypeSupported(String)

Devuelve un valor que indica si el codificador del mensaje admite el valor especificado para el tipo de contenido de nivel de mensaje.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ReadMessage(ArraySegment<Byte>, BufferManager)

Cuando se invalida en una clase derivada, lee un mensaje del búfer especificado.

ReadMessage(ArraySegment<Byte>, BufferManager, String)

Cuando se invalida en una clase derivada, lee un mensaje de la secuencia especificada.

ReadMessage(Stream, Int32)

Cuando se invalida en una clase derivada, lee un mensaje de la secuencia especificada.

ReadMessage(Stream, Int32, String)

Cuando se invalida en una clase derivada, lee un mensaje de la secuencia especificada.

ToString()

Devuelve el tipo de contenido que usa el codificador del mensaje.

WriteMessage(Message, Int32, BufferManager)

Escribe un mensaje menor que un tamaño especificado en un búfer de la matriz de bytes.

WriteMessage(Message, Int32, BufferManager, Int32)

Cuando se invalida en una clase derivada, escribe un mensaje menor de un tamaño especificado en un búfer de una matriz de bytes en la posición especificada.

WriteMessage(Message, Stream)

Cuando se invalida en una clase derivada, escribe un mensaje a una secuencia especificada.

Se aplica a