MessageEncoder 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
编码器是用于将消息写入到流中并从流中读取消息的组件。
public ref class MessageEncoder abstractpublic abstract class MessageEncodertype MessageEncoder = classPublic MustInherit Class MessageEncoder- 继承
- 
				MessageEncoder
示例
下面的代码演示一个派生自 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 是一个基类,它提供支持多用途 Internet 邮件扩展 (MIME) 内容类型和邮件版本的实现,并根据该内容类型定义消息的序列化和反序列化接口。 将其作为基类,用于编写您自己的自定义编码器。
如果希望实现自定义消息编码器,请使用此类。 若要实现自己的自定义消息编码器,您必须提供下列抽象基类的自定义实现:
重写 Encoder 以返回自定义 MessageEncoder 的实例。 然后通过重写 MessageEncoderFactory 方法返回此工厂的实例,将自定义 CreateMessageEncoderFactory 连接到用于配置服务或客户端的绑定元素堆栈。
在消息的内存表示形式和可以写入流中的 XML 信息集 (Infoset) 表示形式之间进行转换的任务被包装到 MessageEncoder 类中,该类通常作为支持特定类型 XML 编码的 XML 读取器和 XML 编写器的工厂。
MessageEncoder 的主要方法包括 WriteMessage 和 ReadMessage。 WriteMessage 采用 Message 对象,并将其写入到 Stream 对象。 ReadMessage Stream采用 对象和最大标头大小,并返回 Message 对象。
构造函数
| MessageEncoder() | 初始化 MessageEncoder 类的新实例。 | 
属性
| ContentType | 在派生类中重写时,获取编码器使用的 MIME 内容类型。 | 
| MediaType | 在派生类中重写时,获取编码器使用的媒体类型值。 | 
| MessageVersion | 在派生类中重写时,获取编码器使用的消息版本值。 |