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) = 0 でmessageOffset抽象メソッドを呼び出します。

適用対象

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)によって呼び出されます。

適用対象