BinaryServerFormatterSink.ProcessMessage Metodo

Definizione

Richiede l'elaborazione dei messaggi dal sink corrente.

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

Parametri

sinkStack
IServerChannelSinkStack

Stack di sink di canale che ha chiamato il sink corrente.

requestMsg
IMessage

Messaggio che contiene la richiesta.

requestHeaders
ITransportHeaders

Intestazioni recuperate dal messaggio in arrivo dal client.

requestStream
Stream

Flusso che deve essere elaborato e passato al sink di deserializzazione.

responseMsg
IMessage

Quando termina, questo metodo contiene un oggetto IMessage che contiene il messaggio di risposta. Questo parametro viene passato non inizializzato.

responseHeaders
ITransportHeaders

Quando termina, questo metodo contiene un ITransportHeaders oggetto che contiene le intestazioni da aggiungere al messaggio restituito che punta al client. Questo parametro viene passato non inizializzato.

responseStream
Stream

Quando termina, questo metodo contiene un Stream oggetto che punta al sink di trasporto. Questo parametro viene passato non inizializzato.

Valori restituiti

Valore ServerProcessing di stato che fornisce informazioni sull'elaborazione del messaggio.

Implementazioni

Commenti

Il processo del proxy consiste nel convertire una chiamata al metodo richiamata in un messaggio. Il messaggio, che implementa l'interfaccia, viene passato dall'estremità IMessage client al server richiamando ProcessMessage gli oggetti sink del messaggio. I sink dei messaggi vengono concatenati, il che significa che ogni sink di messaggio è responsabile della chiamata ProcessMessage al sink del messaggio successivo dopo il completamento del lavoro del sink del messaggio corrente. Ad esempio, un sink di messaggio correlato alla sincronizzazione potrebbe causare l'acquisizione o il rilascio di un blocco e delegato al sink di messaggi downstream.

Quando il sink del canale del formattatore ottiene un messaggio che deve essere inviato sul canale, chiama SyncProcessMessage, passando il messaggio come parametro. Il sink del formattatore crea quindi la matrice di intestazione di trasporto e chiama GetRequestStream sul sink del formattatore. Questa chiamata viene inoltrata verso il basso nella catena di sink e qualsiasi sink può creare un flusso di richiesta che verrà passato di nuovo al sink del formattatore. Al termine della chiamata, il messaggio viene serializzato, ProcessMessage viene chiamato nella prima catena della catena di sink e il messaggio viene passato ai sink del canale.

Dopo che i sink del canale ricevono il messaggio, possono scrivere dati nel flusso, aggiungere intestazioni alla matrice di intestazione e aggiungersi allo stack di sink prima di inoltrare la chiamata al sink successivo. Quando la chiamata raggiunge il sink di trasporto alla fine della catena, il sink di trasporto invia le intestazioni e il messaggio serializzato sul canale al server, in cui il processo viene invertito.

Quando il messaggio viene visualizzato sul lato server, il sink di trasporto recupera le intestazioni e il messaggio serializzato dal flusso e le inoltra attraverso la catena di sink finché non viene raggiunto il sink del formattatore. Il sink del formattatore deserializza quindi il messaggio e lo inoltra all'infrastruttura di comunicazione remota. L'infrastruttura remota trasforma quindi il messaggio in una chiamata al metodo e chiama l'oggetto server.

Si applica a