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 вызывается в первой цепочке в цепочке приемников и передается в приемники каналов.
После того как приемники каналов получают сообщение, они могут записывать данные в поток, добавлять заголовки в массив заголовков и добавлять себя в стек приемника перед перенаправлением вызова в следующий приемник. Когда вызов достигает приемника транспорта в конце цепочки, приемник транспорта отправляет заголовки и сериализованное сообщение по каналу на сервер, где процесс перевернут.
Когда сообщение достигает стороны сервера, приемник транспорта извлекает заголовки и сериализованное сообщение из потока и пересылает их через цепочку приемника до тех пор, пока они не достигнут приемника модуля форматирования. Затем приемник модуля форматирования десериализует сообщение и перенаправит его в удаленное взаимодействие, где сообщение преобразуется в вызов метода и вызывается объект сервера.
Применяется к
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по