MessageEncoder.WriteMessage メソッド

定義

派生クラスでオーバーライドされた場合、指定したストリームまたはバッファーにメッセージを書き込みます。

オーバーロード

WriteMessage(Message, Stream)

派生クラスでオーバーライドされた場合、指定したストリームにメッセージを書き込みます。

WriteMessage(Message, Int32, BufferManager)

指定したサイズより小さいメッセージを、バイト配列バッファーに書き込みます。

WriteMessage(Message, Int32, BufferManager, Int32)

派生クラスでオーバーライドされた場合、指定したサイズより小さいメッセージを、指定したオフセットのバイト配列バッファーに書き込みます。

WriteMessage(Message, Stream)

ソース:
MessageEncoder.cs
ソース:
MessageEncoder.cs
ソース:
MessageEncoder.cs

派生クラスでオーバーライドされた場合、指定したストリームにメッセージを書き込みます。

public:
 abstract void WriteMessage(System::ServiceModel::Channels::Message ^ message, System::IO::Stream ^ stream);
public abstract void WriteMessage (System.ServiceModel.Channels.Message message, System.IO.Stream stream);
abstract member WriteMessage : System.ServiceModel.Channels.Message * System.IO.Stream -> unit
Public MustOverride Sub WriteMessage (message As Message, stream As Stream)

パラメーター

message
Message

Message に書き込む stream

stream
Stream

Stream を書き込む message オブジェクト。

次のコードは、WriteMessage(Message, Stream) メソッドを実装する方法を示しています。

public override void WriteMessage(Message message, Stream stream)
{
    XmlWriter writer = XmlWriter.Create(stream, this.writerSettings);
    message.WriteMessage(writer);
    writer.Close();
}

適用対象

WriteMessage(Message, Int32, BufferManager)

ソース:
MessageEncoder.cs
ソース:
MessageEncoder.cs
ソース:
MessageEncoder.cs

指定したサイズより小さいメッセージを、バイト配列バッファーに書き込みます。

public:
 ArraySegment<System::Byte> WriteMessage(System::ServiceModel::Channels::Message ^ message, int maxMessageSize, System::ServiceModel::Channels::BufferManager ^ bufferManager);
public ArraySegment<byte> WriteMessage (System.ServiceModel.Channels.Message message, int maxMessageSize, System.ServiceModel.Channels.BufferManager bufferManager);
member this.WriteMessage : System.ServiceModel.Channels.Message * int * System.ServiceModel.Channels.BufferManager -> ArraySegment<byte>
Public Function WriteMessage (message As Message, maxMessageSize As Integer, bufferManager As BufferManager) As ArraySegment(Of Byte)

パラメーター

message
Message

メッセージ バッファーに書き込む Message

maxMessageSize
Int32

書き込み可能な最大メッセージ サイズ。

bufferManager
BufferManager

メッセージの書き込み先であるバッファーを管理する BufferManager

戻り値

メッセージのシリアル化先であるバッファーを提供する ArraySegment<T> 型の byte

注釈

このメソッドは、抽象メソッド WriteMessage(Message, Int32, BufferManager, Int32) を、messageOffset = 0 を指定して呼び出します。

適用対象

WriteMessage(Message, Int32, BufferManager, Int32)

ソース:
MessageEncoder.cs
ソース:
MessageEncoder.cs
ソース:
MessageEncoder.cs

派生クラスでオーバーライドされた場合、指定したサイズより小さいメッセージを、指定したオフセットのバイト配列バッファーに書き込みます。

public:
 abstract ArraySegment<System::Byte> WriteMessage(System::ServiceModel::Channels::Message ^ message, int maxMessageSize, System::ServiceModel::Channels::BufferManager ^ bufferManager, int messageOffset);
public abstract ArraySegment<byte> WriteMessage (System.ServiceModel.Channels.Message message, int maxMessageSize, System.ServiceModel.Channels.BufferManager bufferManager, int messageOffset);
abstract member WriteMessage : System.ServiceModel.Channels.Message * int * System.ServiceModel.Channels.BufferManager * int -> ArraySegment<byte>
Public MustOverride Function WriteMessage (message As Message, maxMessageSize As Integer, bufferManager As BufferManager, messageOffset As Integer) As ArraySegment(Of Byte)

パラメーター

message
Message

メッセージ バッファーに書き込む Message

maxMessageSize
Int32

書き込み可能な最大メッセージ サイズ。

bufferManager
BufferManager

メッセージの書き込み先であるバッファーを管理する BufferManager

messageOffset
Int32

バッファーを提供するバイト配列の先頭から開始するセグメントのオフセット。

戻り値

メッセージのシリアル化先であるバッファーを提供する ArraySegment<T> 型の byte

次のコードは、WriteMessage(Message, Int32, BufferManager, Int32) メソッドを実装する方法を示しています。

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;
}

注釈

このメソッドは WriteMessage(Message, Int32, BufferManager, Int32) によって呼び出されます。

適用対象