MessageEncoder Класс

Определение

Кодировщик — это компонент для записи сообщений в поток и для чтения сообщений из потока.The encoder is the component that is used to write messages to a stream and to read messages from a stream.

public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public MustInherit Class MessageEncoder
Наследование
MessageEncoder

Примеры

В следующем коде приведен пример класса, унаследованного от MessageEncoder.The following code shows an example of a class that is derived from 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();
    }

Комментарии

MessageEncoder — базовый класс, предоставляющий реализации, поддерживающие тип содержимого MIME и версию сообщения, и определяющий интерфейс для сериализации и десериализации сообщений в соответствии с этим типом содержимого.MessageEncoder is a base class that provides implementations that support a Multipurpose Internet Mail Extensions (MIME) content type and message version, and defines the interface for the serialization and deserialization of messages according to that content type. Используйте этот класс как базовый для создания собственного кодировщика.Use it as a base class for writing your own custom encoder.

Используйте этот класс, если необходимо реализовать пользовательский кодировщик сообщений.Use this class if you want to implement a custom message encoder. Чтобы реализовать собственный пользовательский кодировщик сообщений, предоставьте пользовательские реализации следующих абстрактных базовых классов.To implement your own custom message encoder, you must provide custom implementations of the following abstract base classes:

Переопределите свойство Encoder, чтобы обеспечить возврат экземпляра пользовательского кодировщика MessageEncoder.Override the Encoder to return an instance of your custom MessageEncoder. Затем подключите пользовательскую фабрику MessageEncoderFactory к стеку элементов привязки, используемому для настройки службы или клиента, переопределив метод CreateMessageEncoderFactory, чтобы вернуть экземпляр этой фабрики.Then wire up your custom MessageEncoderFactory to the binding element stack used to configure the service or client by overriding the CreateMessageEncoderFactory method to return an instance of this factory.

Задача преобразования из представления сообщения в памяти в представление в виде набора информационных элементов XML (Infoset), которое можно записать в поток, инкапсулируется в класс MessageEncoder, который наиболее часто выступает как фабрика модулей чтения и записи XML, поддерживающих определенные типы кодировок XML.The task of converting between the in-memory representation of a message and an XML Information Set (Infoset) representation that can be written to a stream is encapsulated within the MessageEncoder class, which most commonly serves as a factory for XML readers and XML writers that support specific types of XML encodings.

Основные методы MessageEncoder — это WriteMessage и ReadMessage.The key methods on MessageEncoder are WriteMessage and ReadMessage. WriteMessage принимает объект Message и записывает его в объект Stream.WriteMessage takes a Message object and writes it into a Stream object. ReadMessage принимает объект Stream и максимальный размер заголовка и возвращает объект Message.ReadMessage takes a Stream object and a maximum header size and returns a Message object.

Конструкторы

MessageEncoder()

Инициализирует новый экземпляр класса MessageEncoder.Initializes a new instance of the MessageEncoder class.

Свойства

ContentType

При переопределении в производном классе возвращает тип содержимого MIME, использованный кодировщиком.When overridden in a derived class, gets the MIME content type used by the encoder.

MediaType

При переопределении в производном классе возвращает тип носителя, использованный кодировщиком.When overridden in a derived class, gets the media type value that is used by the encoder.

MessageVersion

При переопределении в производном классе возвращает версию сообщения, используемую кодировщиком.When overridden in a derived class, gets the message version value that is used by the encoder.

Методы

BeginWriteMessage(Message, Stream, AsyncCallback, Object)

Запускает запись сообщения для кодировщика сообщения с заданным сообщением, потоком, обратным вызовом и состоянием.Starts the writing of message for the message encoder with specified message, stream, callback and state.

EndWriteMessage(IAsyncResult)

Завершает запись сообщений для кодировщика сообщений.Ends the writing of messages for the message encoder.

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetProperty<T>()

Возвращает запрошенный типизированный объект, если он имеется, из соответствующего уровня стека каналов.Returns a typed object requested, if present, from the appropriate layer in the channel stack.

GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
IsContentTypeSupported(String)

Возвращает значение, указывающее, поддерживается ли кодировщиком заданное значение уровня сообщений типа содержимого.Returns a value that indicates whether a specified message-level content-type value is supported by the message encoder.

MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ReadMessage(ArraySegment<Byte>, BufferManager)

При переопределении в производном классе считывает из заданного буфера сообщение.When overridden in a derived class, reads a message from a specified buffer.

ReadMessage(ArraySegment<Byte>, BufferManager, String)

При переопределении в производном классе считывает из заданного потока сообщение.When overridden in a derived class, reads a message from a specified stream.

ReadMessage(Stream, Int32)

При переопределении в производном классе считывает из заданного потока сообщение.When overridden in a derived class, reads a message from a specified stream.

ReadMessage(Stream, Int32, String)

При переопределении в производном классе считывает из заданного потока сообщение.When overridden in a derived class, reads a message from a specified stream.

ToString()

Возвращает тип содержимого, используемый кодировщиком сообщений.Returns the content type that is used by the message encoder.

WriteMessage(Message, Int32, BufferManager)

Записывает сообщение меньше определенного размера в буфер массива байтов.Writes a message less than a specified size to a byte array buffer.

WriteMessage(Message, Int32, BufferManager, Int32)

При переопределении в производном классе записывает сообщение меньше определенного размера в буфер массива байтов с заданным смещением.When overridden in a derived class, writes a message of less than a specified size to a byte array buffer at the specified offset.

WriteMessage(Message, Stream)

При переопределении в производном классе записывает сообщение в указанный поток.When overridden in a derived class, writes a message to a specified stream.

Применяется к