Bagikan melalui


MessageEncoder Kelas

Definisi

Encoder adalah komponen yang digunakan untuk menulis pesan ke aliran dan membaca pesan dari aliran.

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

Contoh

Kode berikut menunjukkan contoh kelas yang berasal dari 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();
    }

Keterangan

MessageEncoder adalah kelas dasar yang menyediakan implementasi yang mendukung jenis konten dan versi pesan Multipurpose Internet Mail Extensions (MIME), dan mendefinisikan antarmuka untuk serialisasi dan deserialisasi pesan sesuai dengan jenis konten tersebut. Gunakan sebagai kelas dasar untuk menulis encoder kustom Anda sendiri.

Gunakan kelas ini jika Anda ingin mengimplementasikan encoder pesan kustom. Untuk mengimplementasikan encoder pesan kustom Anda sendiri, Anda harus menyediakan implementasi kustom dari kelas dasar abstrak berikut:

Timpa Encoder untuk mengembalikan instans MessageEncoder kustom Anda. Kemudian kawat kustom MessageEncoderFactory Anda ke tumpukan elemen pengikatan yang digunakan untuk mengonfigurasi layanan atau klien dengan mengambil CreateMessageEncoderFactory alih metode untuk mengembalikan instans pabrik ini.

Tugas konversi antara representasi dalam memori pesan dan representasi Set Informasi XML (Infoset) yang dapat ditulis ke aliran dienkapsulasi dalam MessageEncoder kelas , yang paling umum berfungsi sebagai pabrik untuk pembaca XML dan penulis XML yang mendukung jenis pengodean XML tertentu.

Metode utama pada MessageEncoder adalah WriteMessage dan ReadMessage. WriteMessageMessage mengambil objek dan menulisnya ke dalam Stream objek. ReadMessage mengambil Stream objek dan ukuran header maksimum dan mengembalikan Message objek.

Konstruktor

MessageEncoder()

Menginisialisasi instans baru kelas MessageEncoder.

Properti

ContentType

Saat ditimpa di kelas turunan, mendapatkan jenis konten MIME yang digunakan oleh encoder.

MediaType

Saat ditimpa di kelas turunan, mendapatkan nilai jenis media yang digunakan oleh encoder.

MessageVersion

Saat ditimpa di kelas turunan, mendapatkan nilai versi pesan yang digunakan oleh encoder.

Metode

BeginWriteMessage(Message, Stream, AsyncCallback, Object)

Memulai penulisan pesan untuk encoder pesan dengan pesan, aliran, panggilan balik, dan status tertentu.

EndWriteMessage(IAsyncResult)

Mengakhiri penulisan pesan untuk encoder pesan.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetProperty<T>()

Mengembalikan objek jenis yang diminta, jika ada, dari lapisan yang sesuai di tumpukan saluran.

GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
IsContentTypeSupported(String)

Mengembalikan nilai yang menunjukkan apakah nilai jenis konten tingkat pesan tertentu didukung oleh encoder pesan.

MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ReadMessage(ArraySegment<Byte>, BufferManager)

Saat ditimpa di kelas turunan, membaca pesan dari buffer tertentu.

ReadMessage(ArraySegment<Byte>, BufferManager, String)

Saat ditimpa di kelas turunan, membaca pesan dari aliran tertentu.

ReadMessage(Stream, Int32)

Saat ditimpa di kelas turunan, membaca pesan dari aliran tertentu.

ReadMessage(Stream, Int32, String)

Saat ditimpa di kelas turunan, membaca pesan dari aliran tertentu.

ReadMessageAsync(ArraySegment<Byte>, BufferManager, String)

Encoder adalah komponen yang digunakan untuk menulis pesan ke aliran dan membaca pesan dari aliran.

ReadMessageAsync(Stream, Int32, String)

Encoder adalah komponen yang digunakan untuk menulis pesan ke aliran dan membaca pesan dari aliran.

ToString()

Mengembalikan tipe konten yang digunakan oleh encoder pesan.

WriteMessage(Message, Int32, BufferManager)

Menulis pesan kurang dari ukuran yang ditentukan ke buffer array byte.

WriteMessage(Message, Int32, BufferManager, Int32)

Saat ditimpa di kelas turunan, menulis pesan kurang dari ukuran yang ditentukan ke buffer array byte pada offset yang ditentukan.

WriteMessage(Message, Stream)

Saat ditimpa di kelas turunan, menulis pesan ke aliran tertentu.

WriteMessageAsync(Message, Int32, BufferManager, Int32)

Encoder adalah komponen yang digunakan untuk menulis pesan ke aliran dan membaca pesan dari aliran.

WriteMessageAsync(Message, Stream)

Encoder adalah komponen yang digunakan untuk menulis pesan ke aliran dan membaca pesan dari aliran.

Berlaku untuk