BinaryServerFormatterSink.ProcessMessage Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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.