SdlChannelSink.ProcessMessage Method

Requests message processing from the current sink.

Namespace:  System.Runtime.Remoting.MetadataServices
Assembly:  System.Runtime.Remoting (in System.Runtime.Remoting.dll)

[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure, 
	Infrastructure = true)]
public ServerProcessing ProcessMessage(
	IServerChannelSinkStack sinkStack,
	IMessage requestMsg,
	ITransportHeaders requestHeaders,
	Stream requestStream,
	out IMessage responseMsg,
	out ITransportHeaders responseHeaders,
	out Stream responseStream
)

Parameters

sinkStack
Type: System.Runtime.Remoting.Channels.IServerChannelSinkStack

A stack of channel sinks that called the current sink.

requestMsg
Type: System.Runtime.Remoting.Messaging.IMessage

The message that contains the request.

requestHeaders
Type: System.Runtime.Remoting.Channels.ITransportHeaders

The headers that are retrieved from the incoming message from the client.

requestStream
Type: System.IO.Stream

The stream that needs to be processed and passed on to the deserialization sink.

responseMsg
Type: System.Runtime.Remoting.Messaging.IMessage

When this method returns, contains a IMessage that holds the response message. This parameter is passed uninitialized.

responseHeaders
Type: System.Runtime.Remoting.Channels.ITransportHeaders

When this method returns, contains a ITransportHeaders that holds the headers to add to return message heading to the client. This parameter is passed uninitialized.

responseStream
Type: System.IO.Stream

When this method returns, contains a Stream that is heading to the transport sink. This parameter is passed uninitialized.

Return Value

Type: System.Runtime.Remoting.Channels.ServerProcessing
A ServerProcessing status value that provides information about how the message was processed.

Implements

IServerChannelSink.ProcessMessage(IServerChannelSinkStack, IMessage, ITransportHeaders, Stream, IMessage, ITransportHeaders, Stream)

The proxy's job is to convert a method call that is invoked on it into a message object. The Message object, which implements the IMessage interface, is passed from the client end to the server end by invoking ProcessMessage on message sink objects. Message sinks are chained together, which means that every message sink is responsible for calling ProcessMessage on the next message sink after it has performed its work. For instance, a synchronization-related message sink might cause a lock to be acquired or released and delegated to the downstream message sink.

When the formatter channel sink gets a message that needs to be sent over the channel, it calls SyncProcessMessage, passing the message as a parameter. The formatter sink then creates the transport header array and calls GetRequestStream on the formatter sink. This call is forwarded down the sink chain, and any sink can create a request stream that is passed back to the formatter sink. After this call returns, the message is serialized, ProcessMessage is called on the first chain in the sink chain, and the message is passed to the channel sinks.

After the channel sinks get the message, they can write data to the stream, add headers to the header array, and add themselves to the sink stack before forwarding the call to the next sink. When the call reaches the transport sink at the end of the chain, the transport sink sends the headers and serialized message over the channel to the server, where the process is reversed.

When the message reaches the server side, the transport sink retrieves the headers and serialized message from the stream and forwards these through the sink chain until they reach the formatter sink. The formatter sink then deserializes the message and forwards it to remoting, where the message is turned into a method call and the server object is called.

.NET Framework

Supported in: 4.5.3, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft