MessageEncoder Klass

Definition

Kodaren är den komponent som används för att skriva meddelanden till en ström och läsa meddelanden från en ström.

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

Exempel

Följande kod visar ett exempel på en klass som härleds från 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();
    }

Kommentarer

MessageEncoder är en basklass som tillhandahåller implementeringar som stöder en MIME-innehållstyp (Multipurpose Internet Mail Extensions) och meddelandeversion och definierar gränssnittet för serialisering och deserialisering av meddelanden enligt den innehållstypen. Använd den som basklass för att skriva en egen anpassad kodare.

Använd den här klassen om du vill implementera en anpassad meddelandekodare. Om du vill implementera en egen anpassad meddelandekodare måste du tillhandahålla anpassade implementeringar av följande abstrakta basklasser:

Åsidosätt Encoder för att returnera en instans av ditt anpassade MessageEncoder. Anslut sedan din anpassade MessageEncoderFactory till bindningselementstacken som används för att konfigurera tjänsten eller klienten genom att åsidosätta CreateMessageEncoderFactory metoden för att returnera en instans av den här fabriken.

Uppgiften att konvertera mellan minnesintern representation av ett meddelande och en XML-informationsuppsättningsrepresentation (Infoset) som kan skrivas till en dataström kapslas in i MessageEncoder klassen, som oftast fungerar som en fabrik för XML-läsare och XML-skrivare som stöder specifika typer av XML-kodningar.

De viktigaste metoderna på MessageEncoder är WriteMessage och ReadMessage. WriteMessage tar ett Message objekt och skriver det till ett Stream objekt. ReadMessage tar ett Stream objekt och en maximal rubrikstorlek och returnerar ett Message objekt.

Konstruktorer

Name Description
MessageEncoder()

Initierar en ny instans av MessageEncoder klassen.

Egenskaper

Name Description
ContentType

När den åsidosättas i en härledd klass hämtar den MIME-innehållstyp som används av kodaren.

MediaType

När det åsidosätts i en härledd klass hämtar det medietypsvärde som används av kodaren.

MessageVersion

När det åsidosätts i en härledd klass hämtar det meddelandeversionsvärde som används av kodaren.

Metoder

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

Startar skrivning av meddelande för meddelandekodaren med angivet meddelande, dataström, återanrop och tillstånd.

EndWriteMessage(IAsyncResult)

Avslutar skrivning av meddelanden för meddelandekodaren.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetProperty<T>()

Returnerar ett typat objekt som begärs, om det finns, från lämpligt lager i kanalstacken.

GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
IsContentTypeSupported(String)

Returnerar ett värde som anger om ett angivet innehållstypvärde på meddelandenivå stöds av meddelandekodaren.

MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ReadMessage(ArraySegment<Byte>, BufferManager, String)

När det åsidosätts i en härledd klass läser ett meddelande från en angiven ström.

ReadMessage(ArraySegment<Byte>, BufferManager)

När det åsidosättas i en härledd klass läser ett meddelande från en angiven buffert.

ReadMessage(Stream, Int32, String)

När det åsidosätts i en härledd klass läser ett meddelande från en angiven ström.

ReadMessage(Stream, Int32)

När det åsidosätts i en härledd klass läser ett meddelande från en angiven ström.

ToString()

Returnerar den innehållstyp som används av meddelandekodaren.

WriteMessage(Message, Int32, BufferManager, Int32)

När det åsidosättas i en härledd klass skriver du ett meddelande med mindre än en angiven storlek till en bytematrisbuffert vid den angivna förskjutningen.

WriteMessage(Message, Int32, BufferManager)

Skriver ett meddelande som är mindre än en angiven storlek till en bytematrisbuffert.

WriteMessage(Message, Stream)

När det åsidosätts i en härledd klass skriver du ett meddelande till en angiven ström.

Gäller för