MessageEncoder 클래스

정의

인코더는 스트림에서 메시지를 쓰거나 읽는 데 사용되는 구성 요소입니다.

public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public 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 는 MIME(다목적 인터넷 메일 확장) 콘텐츠 형식 및 메시지 버전을 지원하는 구현을 제공하고 해당 콘텐츠 형식에 따라 메시지의 직렬화 및 역직렬화를 위한 인터페이스를 정의하는 기본 클래스입니다. 사용자 지정 인코더를 작성하기 위한 기본 클래스로 사용합니다.

사용자 지정 메시지 인코더를 구현하려는 경우 이 클래스를 사용합니다. 사용자 고유의 사용자 지정 메시지 인코더를 구현하려면 다음 추상 기본 클래스의 사용자 지정 구현을 제공해야 합니다.

사용자 지정 인스턴스를 Encoder 반환하도록 재정의합니다 MessageEncoder. 그런 다음, 이 팩터리의 인스턴스를 반환하도록 메서드를 재정의하여 서비스 또는 클라이언트를 CreateMessageEncoderFactory 구성하는 데 사용되는 바인딩 요소 스택에 사용자 지정 MessageEncoderFactory 을 연결합니다.

메시지의 메모리 내 표현과 스트림에 쓸 수 있는 XML 정보 집합(Infoset) 표현 간에 변환하는 작업은 클래스 내에 MessageEncoder 캡슐화되며, 이 작업은 특정 유형의 XML 인코딩을 지원하는 XML 판독기 및 XML 작성기의 팩터리 역할을 합니다.

키 메서드 MessageEncoder 는 다음과 같습니다 WriteMessage ReadMessage. WriteMessage 는 개체를 Message 가져와서 개체에 Stream 씁니다. ReadMessageStream 개체와 최대 헤더 크기를 사용하고 개체를 Message 반환합니다.

생성자

MessageEncoder()

MessageEncoder 클래스의 새 인스턴스를 초기화합니다.

속성

ContentType

파생 클래스에서 재정의되는 경우 인코더에서 사용하는 MIME 콘텐츠 형식을 가져옵니다.

MediaType

파생 클래스에서 재정의되는 경우 인코더에서 사용하는 미디어 유형 값을 가져옵니다.

MessageVersion

파생 클래스에서 재정의되는 경우 인코더에서 사용하는 메시지 버전 값을 가져옵니다.

메서드

BeginWriteMessage(Message, Stream, AsyncCallback, Object)

지정된 메시지, 스트림, 콜백 및 상태를 사용하여 메시지 인코더에 대한 메시지 쓰기를 시작합니다.

EndWriteMessage(IAsyncResult)

메시지 인코더에 대한 메시지 쓰기를 종료합니다.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetProperty<T>()

요청한 형식화된 개체가 있는 경우 채널 스택의 해당 계층에서 반환합니다.

GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
IsContentTypeSupported(String)

지정한 메시지 수준 콘텐츠 형식 값을 메시지 인코더에서 지원하는지 여부를 나타내는 값을 반환합니다.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ReadMessage(ArraySegment<Byte>, BufferManager)

파생 클래스에서 재정의되는 경우 지정된 버퍼에서 메시지를 읽습니다.

ReadMessage(ArraySegment<Byte>, BufferManager, String)

파생 클래스에서 재정의되는 경우 지정된 스트림에서 메시지를 읽습니다.

ReadMessage(Stream, Int32)

파생 클래스에서 재정의되는 경우 지정된 스트림에서 메시지를 읽습니다.

ReadMessage(Stream, Int32, String)

파생 클래스에서 재정의되는 경우 지정된 스트림에서 메시지를 읽습니다.

ToString()

메시지 인코더에서 사용하는 콘텐츠 형식을 반환합니다.

WriteMessage(Message, Int32, BufferManager)

지정된 크기보다 작은 메시지를 바이트 배열 버퍼에 씁니다.

WriteMessage(Message, Int32, BufferManager, Int32)

파생 클래스에서 재정의되는 경우 지정된 크기보다 작은 메시지를 바이트 배열 버퍼의 지정된 오프셋에 씁니다.

WriteMessage(Message, Stream)

파생 클래스에서 재정의되는 경우 지정된 스트림에 메시지를 씁니다.

적용 대상