Partager via


MessageEncoder Classe

Définition

L’encodeur est le composant utilisé pour écrire des messages dans un flux et lire des messages à partir d’un flux.

public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public MustInherit Class MessageEncoder
Héritage
MessageEncoder

Exemples

Le code suivant montre un exemple de classe dérivée 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();
    }

Remarques

MessageEncoder est une classe de base qui fournit des implémentations qui prennent en charge un type de contenu et une version mime (Multipurpose Internet Mail Extensions), et définit l’interface pour la sérialisation et la désérialisation des messages en fonction de ce type de contenu. Utilisez-le comme classe de base pour écrire votre propre encodeur personnalisé.

Utilisez cette classe si vous souhaitez implémenter un encodeur de message personnalisé. Pour implémenter votre propre encodeur de message personnalisé, vous devez fournir des implémentations personnalisées des classes de base abstraites suivantes :

Substituez Encoder pour retourner une instance de votre MessageEncoder personnalisé. Ensuite, connectez votre personnalisé MessageEncoderFactory à la pile d’éléments de liaison utilisée pour configurer le service ou le client en remplaçant la CreateMessageEncoderFactory méthode pour retourner une instance de cette fabrique.

La tâche de conversion entre la représentation en mémoire d’un message et une représentation XML Information Set (Infoset) qui peut être écrite dans un flux est encapsulée dans la MessageEncoder classe, qui sert généralement de fabrique pour les lecteurs XML et les enregistreurs XML qui prennent en charge des types spécifiques d’encodages XML.

Les méthodes clés sur MessageEncoder sont WriteMessage et ReadMessage. WriteMessage prend un Message objet et l’écrit dans un Stream objet. ReadMessage prend un Stream objet et une taille d’en-tête maximale et retourne un Message objet.

Constructeurs

Nom Description
MessageEncoder()

Initialise une nouvelle instance de la classe MessageEncoder.

Propriétés

Nom Description
ContentType

En cas de substitution dans une classe dérivée, obtient le type de contenu MIME utilisé par l’encodeur.

MediaType

En cas de substitution dans une classe dérivée, obtient la valeur de type multimédia utilisée par l’encodeur.

MessageVersion

En cas de substitution dans une classe dérivée, obtient la valeur de version du message utilisée par l’encodeur.

Méthodes

Nom Description
BeginWriteMessage(Message, Stream, AsyncCallback, Object)

Démarre l’écriture de message pour l’encodeur de message avec le message, le flux, le rappel et l’état spécifiés.

EndWriteMessage(IAsyncResult)

Termine l’écriture de messages pour l’encodeur de message.

Equals(Object)

Détermine si l’objet spécifié est égal à l’objet actuel.

(Hérité de Object)
GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetProperty<T>()

Retourne un objet typé demandé, le cas échéant, à partir de la couche appropriée dans la pile de canaux.

GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
IsContentTypeSupported(String)

Retourne une valeur qui indique si une valeur de type de contenu au niveau du message spécifiée est prise en charge par l’encodeur de message.

MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ReadMessage(ArraySegment<Byte>, BufferManager, String)

En cas de substitution dans une classe dérivée, lit un message à partir d’un flux spécifié.

ReadMessage(ArraySegment<Byte>, BufferManager)

En cas de substitution dans une classe dérivée, lit un message à partir d’une mémoire tampon spécifiée.

ReadMessage(Stream, Int32, String)

En cas de substitution dans une classe dérivée, lit un message à partir d’un flux spécifié.

ReadMessage(Stream, Int32)

En cas de substitution dans une classe dérivée, lit un message à partir d’un flux spécifié.

ReadMessageAsync(ArraySegment<Byte>, BufferManager, String)

L’encodeur est le composant utilisé pour écrire des messages dans un flux et lire des messages à partir d’un flux.

ReadMessageAsync(Stream, Int32, String)

L’encodeur est le composant utilisé pour écrire des messages dans un flux et lire des messages à partir d’un flux.

ToString()

Retourne le type de contenu utilisé par l’encodeur de message.

WriteMessage(Message, Int32, BufferManager, Int32)

En cas de substitution dans une classe dérivée, écrit un message de moins d’une taille spécifiée dans une mémoire tampon de tableau d’octets au décalage spécifié.

WriteMessage(Message, Int32, BufferManager)

Écrit un message inférieur à une taille spécifiée dans une mémoire tampon de tableau d’octets.

WriteMessage(Message, Stream)

En cas de substitution dans une classe dérivée, écrit un message dans un flux spécifié.

WriteMessageAsync(Message, Int32, BufferManager, Int32)

L’encodeur est le composant utilisé pour écrire des messages dans un flux et lire des messages à partir d’un flux.

WriteMessageAsync(Message, Stream)

L’encodeur est le composant utilisé pour écrire des messages dans un flux et lire des messages à partir d’un flux.

S’applique à