Share via


MessageEncoder Sınıf

Tanım

Kodlayıcı, bir akışa ileti yazmak ve bir akıştan gelen iletileri okumak için kullanılan bileşendir.

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

Örnekler

Aşağıdaki kod, öğesinden türetilen bir sınıf örneğini MessageEncodergösterir.

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

Açıklamalar

MessageEncoder , Çok Amaçlı İnternet Posta Uzantıları (MIME) içerik türünü ve ileti sürümünü destekleyen uygulamalar sağlayan ve iletilerin bu içerik türüne göre seri hale getirilmesi ve seri durumdan çıkarılması için arabirimini tanımlayan bir temel sınıftır. Kendi özel kodlayıcınızı yazmak için temel sınıf olarak kullanın.

Özel ileti kodlayıcı uygulamak istiyorsanız bu sınıfı kullanın. Kendi özel ileti kodlayıcınızı uygulamak için aşağıdaki soyut temel sınıfların özel uygulamalarını sağlamanız gerekir:

Encoder Özel MessageEncoderörneğinizi döndürmek için öğesini geçersiz kılın. Ardından, bu fabrikanın bir örneğini döndürmek için yöntemini geçersiz kılarak CreateMessageEncoderFactory hizmeti veya istemciyi yapılandırmak için kullanılan bağlama öğesi yığınına özel MessageEncoderFactory bağlantı oluşturun.

Bir iletinin bellek içi gösterimi ile bir akışa yazılabilen XML Bilgi Kümesi (Infoset) gösterimi arasında dönüştürme görevi, sınıfı içinde MessageEncoder kapsüllenmiştir ve bu da en yaygın olarak belirli XML kodlama türlerini destekleyen XML okuyucuları ve XML yazıcıları için bir fabrika görevi görür.

üzerindeki MessageEncoder temel yöntemler ve ReadMessage'tirWriteMessage. WriteMessage bir Message nesneyi alır ve bir Stream nesneye yazar. ReadMessage bir Stream nesne ve üst bilgi boyutu üst bilgi üst bilgisi alır ve bir Message nesne döndürür.

Oluşturucular

MessageEncoder()

MessageEncoder sınıfının yeni bir örneğini başlatır.

Özellikler

ContentType

Türetilmiş bir sınıfta geçersiz kılındığında, kodlayıcı tarafından kullanılan MIME içerik türünü alır.

MediaType

Türetilmiş bir sınıfta geçersiz kılındığında, kodlayıcı tarafından kullanılan medya türü değerini alır.

MessageVersion

Türetilmiş bir sınıfta geçersiz kılındığında, kodlayıcı tarafından kullanılan ileti sürümü değerini alır.

Yöntemler

BeginWriteMessage(Message, Stream, AsyncCallback, Object)

Belirtilen ileti, akış, geri çağırma ve durum ile ileti kodlayıcı için iletinin yazılarak başlatılmasını başlatır.

EndWriteMessage(IAsyncResult)

İleti kodlayıcısı için ileti yazmayı sonlandırır.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetProperty<T>()

Varsa kanal yığınındaki uygun katmandan istenen türe sahip bir nesne döndürür.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
IsContentTypeSupported(String)

Belirtilen ileti düzeyi içerik türü değerinin ileti kodlayıcı tarafından desteklenip desteklenmediğini belirten bir değer döndürür.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ReadMessage(ArraySegment<Byte>, BufferManager)

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen arabellekten bir ileti okur.

ReadMessage(ArraySegment<Byte>, BufferManager, String)

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen akıştan bir ileti okur.

ReadMessage(Stream, Int32)

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen akıştan bir ileti okur.

ReadMessage(Stream, Int32, String)

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen akıştan bir ileti okur.

ReadMessageAsync(ArraySegment<Byte>, BufferManager, String)

Kodlayıcı, bir akışa ileti yazmak ve bir akıştan gelen iletileri okumak için kullanılan bileşendir.

ReadMessageAsync(Stream, Int32, String)

Kodlayıcı, bir akışa ileti yazmak ve bir akıştan gelen iletileri okumak için kullanılan bileşendir.

ToString()

İleti kodlayıcı tarafından kullanılan içerik türünü döndürür.

WriteMessage(Message, Int32, BufferManager)

Belirtilen boyuttan küçük bir iletiyi bayt dizisi arabelleğine yazar.

WriteMessage(Message, Int32, BufferManager, Int32)

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen uzaklıktaki bayt dizisi arabelleğine belirtilen boyuttan küçük bir ileti yazar.

WriteMessage(Message, Stream)

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen akışa bir ileti yazar.

WriteMessageAsync(Message, Int32, BufferManager, Int32)

Kodlayıcı, bir akışa ileti yazmak ve bir akıştan gelen iletileri okumak için kullanılan bileşendir.

WriteMessageAsync(Message, Stream)

Kodlayıcı, bir akışa ileti yazmak ve bir akıştan gelen iletileri okumak için kullanılan bileşendir.

Şunlara uygulanır