BinaryServerFormatterSink.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 Значение состояния, которое содержит сведения о том, как было обработано сообщение.
Реализации
Комментарии
Задание прокси-сервера — преобразовать вызов метода, который вызывается в сообщение. Сообщение, реализующее IMessage интерфейс, передается из клиентского конца в конец сервера путем вызова ProcessMessage объектов приемника сообщений. Приемники сообщений объединяются в цепочку, что означает, что каждый приемник сообщений отвечает за вызов ProcessMessage следующего приемника сообщений после завершения работы текущего приемника сообщений. Например, приемник сообщений, связанных с синхронизацией, может привести к получению или освобождению блокировки и делегированию приемнику нижестоящего сообщения.
Когда приемник канала форматирования получает сообщение, которое должно быть отправлено по каналу, он вызывает SyncProcessMessageсообщение в качестве параметра. Затем приемник форматирования создает массив заголовков транспорта и вызывает GetRequestStream приемник форматирования. Этот вызов перенаправлен вниз по цепочке приемника, и любой приемник может создать поток запроса, который будет передан обратно в приемник форматирования. После возвращения этого вызова сообщение сериализуется, ProcessMessage вызывается первая цепочка в цепочке приемника, а сообщение передается приемникам канала.
После получения сообщения приемники канала могут записывать данные в поток, добавлять заголовки в массив заголовков и добавлять себя в стек приемника перед пересылкой вызова в следующий приемник. Когда вызов достигает приемника транспорта в конце цепочки, приемник транспорта отправляет заголовки и сериализованное сообщение через канал на сервер, где процесс перевернется.
Когда сообщение попадает на сторону сервера, приемник транспорта извлекает заголовки и сериализованное сообщение из потока и пересылает их через цепочку приемника до достижения приемника форматирования. Затем приемник форматирования десериализирует сообщение и пересылает его в инфраструктуру удаленного взаимодействия. Затем инфраструктура удаленного взаимодействия преобразует сообщение в вызов метода и вызывает объект сервера.