Udostępnij za pośrednictwem


MessageEncoder Klasa

Definicja

Koder jest składnikiem używanym do zapisywania komunikatów w strumieniu i odczytywania komunikatów ze strumienia.

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

Przykłady

Poniższy kod przedstawia przykład klasy pochodzącej z MessageEncoderklasy .

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();
    }

Uwagi

MessageEncoder jest klasą bazową, która zapewnia implementacje, które obsługują multipurpose Internet Mail Extensions (MIME) typ zawartości i wersję wiadomości, oraz definiuje interfejs serializacji i deserializacji komunikatów zgodnie z tym typem zawartości. Użyj jej jako klasy bazowej do pisania własnego kodera niestandardowego.

Użyj tej klasy, jeśli chcesz zaimplementować niestandardowy koder komunikatów. Aby zaimplementować własny niestandardowy koder komunikatów, należy podać niestandardowe implementacje następujących abstrakcyjnych klas bazowych:

Zastąpij element , Encoder aby zwrócić wystąpienie niestandardowego MessageEncoderelementu . Następnie podłączanie niestandardowego MessageEncoderFactory stosu elementu powiązania używanego do konfigurowania usługi lub klienta przez zastąpienie CreateMessageEncoderFactory metody w celu zwrócenia wystąpienia tej fabryki.

Zadanie konwersji między reprezentacją w pamięci komunikatu i reprezentacją zestawu informacji XML (Infoset), które można zapisać w strumieniu, jest hermetyzowane w MessageEncoder klasie, która najczęściej służy jako fabryka dla czytników XML i składników zapisywania XML, które obsługują określone typy kodowania XML.

Kluczowe metody MessageEncoder to WriteMessage i ReadMessage. WriteMessage Message pobiera obiekt i zapisuje go w Stream obiekcie. ReadMessage Stream pobiera obiekt i maksymalny rozmiar nagłówka Message i zwraca obiekt.

Konstruktory

MessageEncoder()

Inicjuje nowe wystąpienie klasy MessageEncoder.

Właściwości

ContentType

Po zastąpieniu w klasie pochodnej pobiera typ zawartości MIME używany przez koder.

MediaType

Po zastąpieniu w klasie pochodnej pobiera wartość typu nośnika, która jest używana przez koder.

MessageVersion

Po zastąpieniu w klasie pochodnej pobiera wartość wersji komunikatu, która jest używana przez koder.

Metody

BeginWriteMessage(Message, Stream, AsyncCallback, Object)

Uruchamia zapisywanie komunikatu dla kodera komunikatów z określonym komunikatem, strumieniem, wywołaniem zwrotnym i stanem.

EndWriteMessage(IAsyncResult)

Kończy zapisywanie komunikatów dla kodera komunikatów.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetProperty<T>()

Zwraca żądany obiekt wpisany, jeśli istnieje, z odpowiedniej warstwy w stosie kanału.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsContentTypeSupported(String)

Zwraca wartość wskazującą, czy określona wartość typu zawartości na poziomie komunikatu jest obsługiwana przez koder komunikatów.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ReadMessage(ArraySegment<Byte>, BufferManager)

Po zastąpieniu w klasie pochodnej odczytuje komunikat z określonego buforu.

ReadMessage(ArraySegment<Byte>, BufferManager, String)

Po przesłonięciu w klasie pochodnej odczytuje komunikat z określonego strumienia.

ReadMessage(Stream, Int32)

Po przesłonięciu w klasie pochodnej odczytuje komunikat z określonego strumienia.

ReadMessage(Stream, Int32, String)

Po przesłonięciu w klasie pochodnej odczytuje komunikat z określonego strumienia.

ReadMessageAsync(ArraySegment<Byte>, BufferManager, String)

Koder jest składnikiem używanym do zapisywania komunikatów w strumieniu i odczytywania komunikatów ze strumienia.

ReadMessageAsync(Stream, Int32, String)

Koder jest składnikiem używanym do zapisywania komunikatów w strumieniu i odczytywania komunikatów ze strumienia.

ToString()

Zwraca typ zawartości używany przez koder komunikatów.

WriteMessage(Message, Int32, BufferManager)

Zapisuje komunikat o rozmiarze mniejszym niż określony rozmiar w buforze tablicy bajtów.

WriteMessage(Message, Int32, BufferManager, Int32)

Podczas zastępowania w klasie pochodnej zapisuje komunikat o rozmiarze mniejszym niż określony rozmiar do buforu tablicy bajtów w określonym przesunięciu.

WriteMessage(Message, Stream)

Po przesłonięciu w klasie pochodnej program zapisuje komunikat do określonego strumienia.

WriteMessageAsync(Message, Int32, BufferManager, Int32)

Koder jest składnikiem używanym do zapisywania komunikatów w strumieniu i odczytywania komunikatów ze strumienia.

WriteMessageAsync(Message, Stream)

Koder jest składnikiem używanym do zapisywania komunikatów w strumieniu i odczytywania komunikatów ze strumienia.

Dotyczy