Share via


MessageEncoder Třída

Definice

Kodér je komponenta, která se používá k zápisu zpráv do datového proudu a ke čtení zpráv ze streamu.

public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public MustInherit Class MessageEncoder
Dědičnost
MessageEncoder

Příklady

Následující kód ukazuje příklad třídy, která je odvozena z 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();
    }

Poznámky

MessageEncoder je základní třída, která poskytuje implementace, které podporují typ obsahu a verzi zprávy MIME (Multipurpose Internet Mail Extensions) a definuje rozhraní pro serializaci a deserializaci zpráv podle tohoto typu obsahu. Použijte ho jako základní třídu pro psaní vlastního kodéru.

Tuto třídu použijte, pokud chcete implementovat vlastní kodér zpráv. Chcete-li implementovat vlastní kodér zpráv, musíte poskytnout vlastní implementace následujících abstraktních základních tříd:

Přepište, Encoder aby se vrátila instance vlastního MessageEncoderobjektu . Pak vlastní MessageEncoderFactory propojení se zásobníkem elementů vazby, který slouží ke konfiguraci služby nebo klienta přepsáním CreateMessageEncoderFactory metody pro vrácení instance této továrny.

Úloha převodu mezi reprezentací zprávy v paměti a reprezentací informační sady XML (Infoset), která může být zapsána do datového proudu, je zapouzdřena v rámci MessageEncoder třídy, která nejčastěji slouží jako továrna pro čtenáře XML a zapisovače XML, které podporují konkrétní typy kódování XML.

Klíčové metody jsou MessageEncoderWriteMessage a ReadMessage. WriteMessageMessage vezme objekt a zapíše ho do objektuStream. ReadMessageStream vezme objekt a maximální velikost záhlaví a vrátí Message objekt.

Konstruktory

MessageEncoder()

Inicializuje novou instanci MessageEncoder třídy.

Vlastnosti

ContentType

Při přepsání v odvozené třídě získá typ obsahu MIME používaný kodérem.

MediaType

Při přepsání v odvozené třídě získá hodnotu typu média, kterou používá kodér.

MessageVersion

Při přepsání v odvozené třídě získá hodnotu verze zprávy, kterou používá kodér.

Metody

BeginWriteMessage(Message, Stream, AsyncCallback, Object)

Spustí zápis zprávy pro kodér zprávy se zadanou zprávou, datovým proudem, zpětným voláním a stavem.

EndWriteMessage(IAsyncResult)

Ukončí psaní zpráv pro kodér zpráv.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetProperty<T>()

Vrátí typovaný objekt požadovaný, pokud je k dispozici, z příslušné vrstvy v zásobníku kanálů.

GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
IsContentTypeSupported(String)

Vrátí hodnotu, která označuje, zda kodér zprávy podporuje zadanou hodnotu obsahu na úrovni zprávy.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ReadMessage(ArraySegment<Byte>, BufferManager)

Při přepsání v odvozené třídě přečte zprávu ze zadané vyrovnávací paměti.

ReadMessage(ArraySegment<Byte>, BufferManager, String)

Při přepsání v odvozené třídě přečte zprávu ze zadaného datového proudu.

ReadMessage(Stream, Int32)

Při přepsání v odvozené třídě přečte zprávu ze zadaného datového proudu.

ReadMessage(Stream, Int32, String)

Při přepsání v odvozené třídě přečte zprávu ze zadaného datového proudu.

ReadMessageAsync(ArraySegment<Byte>, BufferManager, String)

Kodér je komponenta, která se používá k zápisu zpráv do datového proudu a ke čtení zpráv ze streamu.

ReadMessageAsync(Stream, Int32, String)

Kodér je komponenta, která se používá k zápisu zpráv do datového proudu a ke čtení zpráv ze streamu.

ToString()

Vrátí typ obsahu, který je používán kodérem zpráv.

WriteMessage(Message, Int32, BufferManager)

Zapíše zprávu menší než zadanou velikost do vyrovnávací paměti pole bajtů.

WriteMessage(Message, Int32, BufferManager, Int32)

Při přepsání v odvozené třídě zapíše zprávu menší než zadanou velikost do vyrovnávací paměti pole bajtů při zadaném posunu.

WriteMessage(Message, Stream)

Při přepsání v odvozené třídě zapíše zprávu do zadaného datového proudu.

WriteMessageAsync(Message, Int32, BufferManager, Int32)

Kodér je komponenta, která se používá k zápisu zpráv do datového proudu a ke čtení zpráv ze streamu.

WriteMessageAsync(Message, Stream)

Kodér je komponenta, která se používá k zápisu zpráv do datového proudu a ke čtení zpráv ze streamu.

Platí pro