Specificare le sequenze di protocolli
Le applicazioni server devono selezionare una o più sequenze di protocolli da usare durante la comunicazione con il client in rete. La scelta delle sequenze di protocollo dipende dalla rete. Vedere Interpretazione delle Informazioni di Associazione e Selezione di una Sequenza di Protocollo.
Il programma server può consentire ai client di connettersi usando qualsiasi sequenza di protocollo supportata dalla rete. A tale scopo, richiamare RpcServerUseAllProtseqs e passare RPC_C_PROTSEQ_MAX_REQS_DEFAULT come primo parametro. Tuttavia, questo non è l'approccio consigliato. L'uso di ncalrpc per le chiamate locali e ncacn_ip_tcp o ncacn_http per le chiamate remote è in genere sufficiente. Le reti eterogenee non sono comuni e praticamente tutte le reti supportano TCP/IP.
Se si vuole che il client limiti l'allocazione delle porte per gli endpoint dinamici a un intervallo di porte specifico, chiamare RpcServerUseAllProtseqsEx. Questa funzione è specifica di Microsoft RPC ed è estremamente utile per le chiamate di procedura remota che passano attraverso un firewall. Usa un parametro aggiuntivo per passare i flag di controllo di allocazione delle porte alla funzione. Vedere Configurazione del Registro di sistema per le allocazioni di porte e l'associazione selettiva.
È possibile specificare sequenze di protocolli e informazioni sugli endpoint nel file MIDL quando si sviluppano le interfacce del server. In tal caso, il server deve usare RpcServerUseAllProtseqsIf per registrare tutte le sequenze di protocollo e le informazioni sull'endpoint associate fornite nel file IDL. Inoltre, esiste una funzione RpcServerUseAllProtseqsIfEx corrispondente che consente anche al server di trasmettere i flag di controllo per l'allocazione delle porte.
Se si desidera configurare i programmi client e server per comunicare con una sequenza di protocollo specificata, l'applicazione server deve chiamare RpcServerUseProtseq. Per un elenco completo delle sequenze di protocollo RPC Microsoft, vedere Costanti delle sequenze di protocollo.
Microsoft RPC fornisce anche RpcServerUseProtseqEx per consentire alle applicazioni di selezionare sequenze di protocolli specifiche e controllare l'allocazione dinamica delle porte.
Oltre ai protocolli orientati alla connessione, Microsoft RPC supporta anche protocolli datagrammi (senza connessione). Sono consigliati protocolli orientati alla connessione; I protocolli del datagram hanno set di funzionalità diversi rispetto ai protocolli orientati alla connessione e devono essere usati solo se uno sviluppatore di sistema distribuito richiede una funzionalità disponibile solo nei protocolli di datagram. Alcune delle funzionalità disponibili quando si usano protocolli di datagrammi sono:
- I datagrammi supportano i protocolli di trasporto UDP e IPX senza connessione.
- Poiché non è necessario stabilire e gestire una connessione, il protocollo RPC a datagrammi richiede meno utilizzo delle risorse.
- I datagrammi consentono un'associazione più veloce.
- Come per RPC orientato alla connessione, per impostazione predefinita le chiamate RPC al datagramma sono nondempotenti. Ciò significa che la chiamata non deve essere eseguita più di una volta. Tuttavia, una funzione può essere contrassegnata come idempotente nel file IDL che indica a RPC che è innocuo eseguire la funzione più volte in risposta a una singola richiesta client. In questo modo, il tempo di esecuzione può mantenere meno stato sul server. Si noti che una chiamata idempotente viene eseguita nuovamente solo in rare circostanze in una rete instabile.
- Datagram RPC supporta l'attributo IDL broadcast. Broadcast consente a un client di inviare messaggi a più server contemporaneamente. In questo modo, il client individua uno dei diversi server disponibili nella rete o controlla più server contemporaneamente. Si noti che la trasmissione dei datagrammi è valida solo all'interno del collegamento locale e in genere non attraversa i router. Le chiamate di trasmissione sono implicitamente idempotenti. Se la chiamata contiene [parametri di uscita], viene restituita solo la prima risposta del server. Una volta che un server risponde, tutte le future RPC su quell'handle di associazione saranno inviate solo a quel server, incluse le chiamate con l'attributo broadcast. Per inviare un'altra trasmissione, crea un nuovo "binding handle" o chiama RpcBindingReset su quello esistente.
- Datagram RPC supporta il forse attributo IDL. In questo modo il client invia una chiamata al server senza attendere una risposta o una conferma. La chiamata non può contenere [parametri di uscita] . Le chiamate che usano il [forse] chiamate sono implicitamente idempotenti.