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 のインスタンスを返します。 次に、MessageEncoderFactory メソッドをオーバーライドしてこのファクトリのインスタンスを返すようにすることで、カスタム CreateMessageEncoderFactory を、サービスまたはクライアントの構成に使用されるバインド要素スタックに接続します。
メッセージのメモリ内表現と、ストリームに書き込むことのできる XML Information Set (Infoset) 表現の変換タスクは、MessageEncoder クラスにカプセル化されており、このクラスは、特定の種類の XML エンコーディングをサポートする XML リーダーおよび XML ライターに対するファクトリとして最も一般的に利用されます。
MessageEncoder の主要なメソッドは、WriteMessage と ReadMessage です。 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