Condividi tramite


Linee guida per le applicazioni client/server

Le applicazioni client/server non devono presupporre che una singola connessione computer sia equivalente a una singola sessione utente. Questo è un caso speciale del problema descritto in indirizzi IP e nomi computer.

Per identificare in modo univoco una connessione client/server, ogni modulo client deve usare un nome o un identificatore univoco. Le applicazioni possono usare oggetti o pipe denominati, socket o altri metodi IPC. Per altre informazioni, vedere spazi dei nomi dell'oggetto kernel .

Per essere compatibili con Servizi Desktop remoto, il modulo server in un'applicazione client/server deve essere in grado di gestire più client che si connettono dallo stesso computer. A tale scopo, il modulo server deve accettare connessioni client tramite un'interfaccia globale ben definita, ad esempio RPC o named pipe. Il server e il client devono negoziare un canale di comunicazione diverso per ogni sessione utente. Il client deve stabilire una connessione al server usando protocolli che supportano facilmente questo tipo di operazione, ad esempio TCP/IP, in cui è possibile usare una connessione socket diversa per ogni applicazione client.

Il modulo client può chiamare la funzione ProcessIdToSessionId per recuperare l'identificatore della sessione di Servizi Desktop remoto. Il client usa quindi una forma di comunicazione interprocesso per passare il relativo identificatore di sessione al modulo server. I moduli client e server possono quindi usare l'identificatore di sessione per configurare un canale di comunicazione privato. Ad esempio, il modulo server può usare un identificatore di sessione per accedere agli oggetti nello spazio dei nomi della sessione per gli oggetti kernel.

Inoltre, il modulo server può usare l'identificatore di sessione in un WTSQuerySessionInformation chiamata per recuperare informazioni aggiuntive sul client. Il modulo server può anche usare l'identificatore di sessione in un WTSSendMessage chiamata per visualizzare un messaggio nel terminale client. Il modulo server può anche creare due eventi per monitorare la connessione client a una sessione e disconnettersi da una sessione. A tale scopo, tuttavia, deve essere registrato nel server Host sessione Desktop remoto (Host sessione Desktop remoto). Per altre informazioni, vedere Monitoraggio delle connessioni di sessione e delle disconnessioni.

Le richieste di input dell'utente rappresentano una potenziale fonte di problemi per le applicazioni client/server. Ad esempio, se un servizio chiama la funzioneMessageBox, la finestra di messaggio viene visualizzata sul desktop del server Host sessione Desktop remoto, non sul desktop del client. Per visualizzare un messaggio in un desktop client, il servizio può chiamare la funzioneWtsSendMessage. In alternativa, il servizio può richiedere l'input dal modulo client e il modulo client può visualizzare l'interfaccia utente e inviare nuovamente l'input risultante al servizio.

I processi generati da più sessioni possono inviare e ricevere dati l'uno dall'altro tramite l'uso di blocchi di memoria condivisa. Per altre informazioni, vedere Creazione di memoria condivisa denominata. La memoria condivisa non può essere usata nelle condizioni seguenti:

  • I processi che usano il blocco di memoria condivisa sono stati generati da più sessioni.
  • Le sessioni condividono le stesse credenziali di autenticazione utente.