MessageEncoder 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
인코더는 스트림에서 메시지를 쓰거나 읽는 데 사용되는 구성 요소입니다.
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의 인스턴스를 반환합니다. 그런 다음, 이 팩터리의 instance 반환하도록 메서드를 재정의하여 서비스 또는 클라이언트를 CreateMessageEncoderFactory 구성하는 데 사용되는 바인딩 요소 스택에 사용자 지정 MessageEncoderFactory 을 연결합니다.
메시지의 메모리 내 표현과 스트림에 쓸 수 있는 XML 정보 집합(Infoset) 표현 간에 변환하는 작업은 클래스 내에서 MessageEncoder 캡슐화되며, 이 작업은 가장 일반적으로 특정 유형의 XML 인코딩을 지원하는 XML 판독기 및 XML 작성기의 팩터리 역할을 합니다.
의 MessageEncoder 주요 메서드는 및 ReadMessage입니다WriteMessage. WriteMessage 는 개체를 Message 가져와서 개체에 Stream 씁니다. ReadMessage 는 Stream 개체와 최대 헤더 크기를 사용하고 개체를 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) |
파생 클래스에서 재정의되는 경우 지정된 스트림에서 메시지를 읽습니다. |
ReadMessageAsync(ArraySegment<Byte>, BufferManager, String) |
인코더는 스트림에서 메시지를 쓰거나 읽는 데 사용되는 구성 요소입니다. |
ReadMessageAsync(Stream, Int32, String) |
인코더는 스트림에서 메시지를 쓰거나 읽는 데 사용되는 구성 요소입니다. |
ToString() |
메시지 인코더에서 사용하는 콘텐츠 형식을 반환합니다. |
WriteMessage(Message, Int32, BufferManager) |
지정된 크기보다 작은 메시지를 바이트 배열 버퍼에 씁니다. |
WriteMessage(Message, Int32, BufferManager, Int32) |
파생 클래스에서 재정의되는 경우 지정된 크기보다 작은 메시지를 바이트 배열 버퍼의 지정된 오프셋에 씁니다. |
WriteMessage(Message, Stream) |
파생 클래스에서 재정의되는 경우 지정된 스트림에 메시지를 씁니다. |
WriteMessageAsync(Message, Int32, BufferManager, Int32) |
인코더는 스트림에서 메시지를 쓰거나 읽는 데 사용되는 구성 요소입니다. |
WriteMessageAsync(Message, Stream) |
인코더는 스트림에서 메시지를 쓰거나 읽는 데 사용되는 구성 요소입니다. |
적용 대상
.NET