Поделиться через


SdlChannelSink.ProcessMessage Метод

Определение

Запрашивает обработку сообщения из текущего приемника.

public:
 virtual System::Runtime::Remoting::Channels::ServerProcessing ProcessMessage(System::Runtime::Remoting::Channels::IServerChannelSinkStack ^ sinkStack, System::Runtime::Remoting::Messaging::IMessage ^ requestMsg, System::Runtime::Remoting::Channels::ITransportHeaders ^ requestHeaders, System::IO::Stream ^ requestStream, [Runtime::InteropServices::Out] System::Runtime::Remoting::Messaging::IMessage ^ % responseMsg, [Runtime::InteropServices::Out] System::Runtime::Remoting::Channels::ITransportHeaders ^ % responseHeaders, [Runtime::InteropServices::Out] System::IO::Stream ^ % responseStream);
public System.Runtime.Remoting.Channels.ServerProcessing ProcessMessage (System.Runtime.Remoting.Channels.IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage requestMsg, System.Runtime.Remoting.Channels.ITransportHeaders requestHeaders, System.IO.Stream requestStream, out System.Runtime.Remoting.Messaging.IMessage responseMsg, out System.Runtime.Remoting.Channels.ITransportHeaders responseHeaders, out System.IO.Stream responseStream);
abstract member ProcessMessage : System.Runtime.Remoting.Channels.IServerChannelSinkStack * System.Runtime.Remoting.Messaging.IMessage * System.Runtime.Remoting.Channels.ITransportHeaders * System.IO.Stream * IMessage * ITransportHeaders * Stream -> System.Runtime.Remoting.Channels.ServerProcessing
override this.ProcessMessage : System.Runtime.Remoting.Channels.IServerChannelSinkStack * System.Runtime.Remoting.Messaging.IMessage * System.Runtime.Remoting.Channels.ITransportHeaders * System.IO.Stream * IMessage * ITransportHeaders * Stream -> System.Runtime.Remoting.Channels.ServerProcessing
Public Function ProcessMessage (sinkStack As IServerChannelSinkStack, requestMsg As IMessage, requestHeaders As ITransportHeaders, requestStream As Stream, ByRef responseMsg As IMessage, ByRef responseHeaders As ITransportHeaders, ByRef responseStream As Stream) As ServerProcessing

Параметры

sinkStack
IServerChannelSinkStack

Стек приемников каналов, который вызывал текущий приемник.

requestMsg
IMessage

Сообщение, которое содержит запрос.

requestHeaders
ITransportHeaders

Заголовки, извлеченные из входящего сообщения от клиента.

requestStream
Stream

Поток, который необходимо обработать и передать приемнику десериализации.

responseMsg
IMessage

При возвращении этого метода содержит IMessage, в котором содержится ответное сообщение. Этот параметр передается неинициализированным.

responseHeaders
ITransportHeaders

При возвращении этого метода содержит ITransportHeaders с заголовками, добавляемыми в возвращенное сообщение, отправляемое клиенту. Этот параметр передается неинициализированным.

responseStream
Stream

При возвращении этого метода содержит Stream, который отправляется транспортному приемнику. Этот параметр передается неинициализированным.

Возвращаемое значение

Значение статуса ServerProcessing, которое предоставляет сведения о способе обработки сообщения.

Реализации

Комментарии

Задача прокси-сервера заключается в преобразовании вызова метода, вызываемого для него, в объект сообщения. Объект Message, реализующий IMessage интерфейс, передается из клиентской части в конец сервера путем вызова ProcessMessage объектов приемника сообщений. Приемники сообщений связаны друг с другом, что означает, что каждый приемник сообщений отвечает за вызов ProcessMessage следующего приемника сообщений после выполнения работы. Например, приемник сообщений, связанный с синхронизацией, может привести к получению или освобождению блокировки и делегированию подчиненного приемника сообщений.

Когда приемник канала форматировщика получает сообщение, которое должно быть отправлено по каналу, он вызывает SyncProcessMessage, передав сообщение в качестве параметра. Затем приемник модуля форматирования создает массив заголовков транспорта и вызывает GetRequestStream в приемнике модуля форматирования. Этот вызов перенаправляется по цепочке приемников, и любой приемник может создать поток запроса, который будет передан обратно в приемник модуля форматирования. После возврата этого вызова сообщение сериализуется, ProcessMessage вызывается в первой цепочке в цепочке приемников, а сообщение передается в приемники каналов.

После того как приемники канала получают сообщение, они могут записывать данные в поток, добавлять заголовки в массив заголовков и добавлять себя в стек приемника перед перенаправлением вызова в следующий приемник. Когда вызов достигает приемника транспорта в конце цепочки, приемник транспорта отправляет заголовки и сериализованное сообщение по каналу на сервер, где процесс будет отменен.

Когда сообщение попадает на сторону сервера, приемник транспорта получает заголовки и сериализованное сообщение из потока и пересылает их по цепочке приемника, пока они не достигнут приемника форматировщика. Затем приемник форматирования десериализует сообщение и пересылает его в удаленное взаимодействие, где сообщение преобразуется в вызов метода и вызывается объект сервера.

Применяется к