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 di messaggi da parte del 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 utilizzato per la chiamata al sink corrente.
- requestMsg
- IMessage
Messaggio che contiene la richiesta.
- requestHeaders
- ITransportHeaders
Intestazioni recuperate dal messaggio in entrata dal client.
- requestStream
- Stream
Flusso che deve essere elaborato e passato al sink di deserializzazione.
- responseMsg
- IMessage
Quando il metodo viene completato, contiene un oggetto IMessage con il messaggio di risposta. Questo parametro viene passato non inizializzato.
- responseHeaders
- ITransportHeaders
Quando il metodo viene completato, contiene un oggetto ITransportHeaders con le intestazioni da aggiungere al messaggio restituito diretto al client. Questo parametro viene passato non inizializzato.
- responseStream
- Stream
Quando il metodo viene completato, contiene un oggetto Stream diretto al sink di trasporto. Questo parametro viene passato non inizializzato.
Restituisce
Valore dello stato ServerProcessing che fornisce informazioni sulle modalità di 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 IMessage , viene passato dal client alla fine del server richiamando ProcessMessage gli oggetti sink dei messaggi. I sink dei messaggi vengono concatenati insieme, il che significa che ogni sink di messaggi è responsabile della chiamata ProcessMessage al sink del messaggio successivo dopo che il sink del messaggio corrente ha completato il suo lavoro. Ad esempio, un sink di messaggi correlato alla sincronizzazione potrebbe causare l'acquisizione o il rilascio di un blocco e delegato al sink del messaggio downstream.
Quando il sink del canale formattatore ottiene un messaggio che deve essere inviato sul canale, chiama SyncProcessMessage, passando il messaggio come parametro. Il sink formattatore crea quindi la matrice di intestazione di trasporto e chiama GetRequestStream nel sink del formattatore. Questa chiamata viene inoltrata verso il basso della catena sink e qualsiasi sink può creare un flusso di richiesta che verrà passato al sink del formattatore. Dopo aver restituito questa chiamata, il messaggio viene serializzato, ProcessMessage viene chiamato nella prima catena della catena sink e il messaggio viene passato ai sink del canale.
Dopo aver visualizzato il messaggio, i sink del canale possono scrivere dati nel flusso, aggiungere intestazioni alla matrice di intestazione e aggiungersi allo stack 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 raggiunto sul lato server, il sink di trasporto recupera le intestazioni e il messaggio serializzato dal flusso e inoltra tali messaggi attraverso la catena sink fino a quando non viene raggiunto il sink del formattatore. Il sink formattatore deserializza quindi il messaggio e lo inoltra all'infrastruttura di comunicazione remota. L'infrastruttura di comunicazione remota trasforma quindi il messaggio in una chiamata al metodo e chiama l'oggetto server.