SdlChannelSink.ProcessMessage Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Solicita o processamento de mensagens do coletor atual.
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
Parâmetros
- sinkStack
- IServerChannelSinkStack
Uma pilha de coletores de canal que chamou o coletor atual.
- requestMsg
- IMessage
A mensagem que contém a solicitação.
- requestHeaders
- ITransportHeaders
Os cabeçalhos recuperados da mensagem de entrada do cliente.
- requestStream
- Stream
O fluxo que precisa ser processado e passado para o coletor de desserialização.
- responseMsg
- IMessage
Quando é retornado, este método contém um IMessage que retém a mensagem de resposta. Este parâmetro é passado não inicializado.
- responseHeaders
- ITransportHeaders
Quando este método é retornado, contém um ITransportHeaders que retém os cabeçalhos a serem adicionados à mensagem de retorno que está sendo encaminhada para o cliente. Este parâmetro é passado não inicializado.
- responseStream
- Stream
Quando este método é retornado, contém um Stream que está sendo encaminhado para o coletor de transporte. Este parâmetro é passado não inicializado.
Retornos
Um valor de status ServerProcessing que fornece informações sobre como a mensagem foi processada.
Implementações
Comentários
O trabalho do proxy é converter uma chamada de método que é invocada nele em um objeto de mensagem. O objeto Message, que implementa a IMessage interface, é passado da extremidade do cliente para a extremidade do servidor invocando ProcessMessage objetos do coletor de mensagens. Os coletores de mensagens são encadeados, o que significa que cada coletor de mensagens é responsável por chamar ProcessMessage no próximo coletor de mensagens depois de executar seu trabalho. Por exemplo, um coletor de mensagens relacionado à sincronização pode fazer com que um bloqueio seja adquirido ou liberado e delegado para o coletor de mensagens downstream.
Quando o coletor de canal do formatador recebe uma mensagem que precisa ser enviada pelo canal, ele chama SyncProcessMessage, passando a mensagem como um parâmetro. Em seguida, o coletor de formatador cria a matriz de cabeçalho de transporte e chama GetRequestStream no coletor de formatador. Essa chamada é encaminhada pela cadeia de coletores e qualquer coletor pode criar um fluxo de solicitação que é passado de volta para o coletor de formatador. Depois que essa chamada retorna, a mensagem é serializada, ProcessMessage é chamada na primeira cadeia na cadeia de coletores e a mensagem é passada para os coletores de canal.
Depois que os coletores de canal receberem a mensagem, eles poderão gravar dados no fluxo, adicionar cabeçalhos à matriz de cabeçalho e adicionar-se à pilha do coletor antes de encaminhar a chamada para o próximo coletor. Quando a chamada atinge o coletor de transporte no final da cadeia, o coletor de transporte envia os cabeçalhos e a mensagem serializada pelo canal para o servidor, onde o processo é invertido.
Quando a mensagem atinge o lado do servidor, o coletor de transporte recupera os cabeçalhos e a mensagem serializada do fluxo e encaminha-os pela cadeia de coletores até que eles cheguem ao coletor de formatador. Em seguida, o coletor de formatador desserializa a mensagem e a encaminha para a comunicação remota, em que a mensagem é transformada em uma chamada de método e o objeto de servidor é chamado.