Specifica delle sequenze di protocolli
Le applicazioni server devono selezionare una o più sequenze di protocolli da usare quando si comunica con il client tramite la rete. La scelta delle sequenze di protocolli dipende dalla rete. Vedere Interpretazione delle informazioni di associazione e selezione di una sequenza di protocolli.
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. Invece, l'uso di ncalrpc per chiamate locali e ncacn_ip_tcp o ncacn_http per le chiamate remote è in genere sufficiente. Le reti eterogene 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 invece RpcServerUseAllProtseqsEx . Questa funzione è specifica di Microsoft RPC ed è estremamente utile per le chiamate di routine remote 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 sull'endpoint nel file MIDL quando si sviluppano le interfacce del server. In caso affermativo, il server deve usare RpcServerUseAllProtseqsIf per registrare tutte le sequenze di protocolli e le informazioni sull'endpoint associate fornite nel file IDL. Inoltre, esiste una funzione RpcServerUseAllProtseqsIfEx corrispondente che consente anche al server di passare i flag di allocazione delle porte.
Se si vuole 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 protocolli RPC Microsoft, vedere Costanti della sequenza di protocolli.
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 datagram (senza connessione). I protocolli orientati alla connessione sono consigliati; I protocolli di 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 datagram sono:
- I datagrammi supportano i protocolli di trasporto senza connessione UDP e IPX.
- Poiché non è necessario stabilire e gestire una connessione, il protocollo RPC del datagram richiede meno sovraccarico delle risorse.
- I datagrammi consentono un'associazione più veloce.
- Come per RPC orientata alla connessione, le chiamate RPC del datagram sono per impostazione predefinita 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ù di una volta in risposta a una singola richiesta client. In questo modo, il tempo di esecuzione consente di mantenere meno stato nel server. Si noti che una chiamata idempotente verrà eseguita nuovamente solo in circostanze rare in una rete instabile.
- Datagram RPC supporta l'attributo IDL di trasmissione . 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 del datagram è 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 [out], viene restituita solo la prima risposta del server. Una volta che un server risponde, tutti i futuri controller di rete su tale handle di associazione verranno inviati solo a tale server, incluse le chiamate con l'attributo broadcast. Per inviare un'altra trasmissione, creare un nuovo handle di associazione o chiamare RpcBindingReset nell'handle esistente.
- Datagram RPC supporta l'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 [out] . Le chiamate che usano le chiamate [forse] sono implicitamente idempotenti.