Windows apps
Collapse the table of content
Expand the table of content
Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

MessageEncoder::WriteMessage Method (Message^, Int32, BufferManager^, Int32)

 

When overridden in a derived class, writes a message of less than a specified size to a byte array buffer at the specified offset.

Namespace:   System.ServiceModel.Channels
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

public:
virtual ArraySegment<unsigned char> WriteMessage(
	Message^ message,
	int maxMessageSize,
	BufferManager^ bufferManager,
	int messageOffset
) abstract

Parameters

message
Type: System.ServiceModel.Channels::Message^

The Message to write to the message buffer.

maxMessageSize
Type: System::Int32

The maximum message size that can be written.

bufferManager
Type: System.ServiceModel.Channels::BufferManager^

The BufferManager that manages the buffer to which the message is written.

messageOffset
Type: System::Int32

The offset of the segment that begins from the start of the byte array that provides the buffer.

Return Value

Type: System::ArraySegment<Byte>

A ArraySegment<T> of type byte that provides the buffer to which the message is serialized.

This method is called by WriteMessage(Message^, Int32, BufferManager^, Int32).

The following code shows how to implement the WriteMessage(Message^, Int32, BufferManager^, Int32) method.

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

Universal Windows Platform
Available since 8
.NET Framework
Available since 3.0
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Return to top
Show:
© 2017 Microsoft