Rendere disponibile il server in rete
Prima che un'applicazione server possa accettare chiamate di procedura remota, deve essere disponibile in rete. A tale scopo, il server indica al runtime RPC che è disposto ad accettare chiamate su una o più sequenze di protocolli. La scelta delle sequenze di protocollo supportate da un'applicazione server è una decisione importante; diverse sequenze di protocolli hanno funzionalità molto diverse. I server che prevedono la ricezione delle chiamate in locale devono usare ncalrpc. I server che accettano chiamate remote devono usare ncacn_ip_tcp. I server non devono verificare che la sequenza di protocollo in cui ricevono chiamate sia la sequenza di protocollo in cui si prevede di ricevere chiamate. Per altre info, vedi Fare attenzione ad altri endpoint RPC in esecuzione nello stesso processo.
Nell'esempio di codice seguente viene usato ncacn_ip_tcp.
La maggior parte dei programmi server usa tutte le sequenze di protocollo disponibili nella rete. A tale scopo, richiamano la funzione RpcServerUseProtseq , come illustrato nel frammento di codice seguente:
RPC_STATUS status;
status = RpcServerUseProtseq(
L"ncacn_ip_tcp",
RPC_C_PROTSEQ_MAX_REQS_DEFAULT, // Protseq-dependent parameter
NULL); // Always specify NULL here.
Il primo parametro della funzione RpcServerUseProtseq è la sequenza di protocollo. Il secondo parametro dipende dalla sequenza di protocollo. Come illustrato nell'esempio di codice, la maggior parte dei programmi server imposta tale parametro su RPC_C_PROTedizione StandardQ_MAX_REQS_DEFAULT. Tale valore imposta la libreria RPC per l'uso del valore predefinito. Il terzo parametro è un descrittore di sicurezza e non deve essere usato nelle app. Per altre informazioni, vedere Security (RPC).
È anche possibile chiamare le funzioni RpcServerUseAllProtseqs, RpcServerUseProtseqEx, RpcServerUseProtseqEp o RpcServerUseProtseqEpEx.
Dopo che un'applicazione server seleziona almeno una sequenza di protocollo, i server che usano endpoint dinamici devono creare informazioni di associazione per ogni sequenza di protocollo usata. Il server archivia le informazioni di associazione in un vettore di associazione che può quindi esportare nel servizio mapper endpoint.
Usare la funzione RpcServerInqBindings per ottenere un vettore di associazione per l'applicazione server, come illustrato nell'esempio seguente:
RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
status = RpcServerInqBindings(&rpcBindingVector);
L'unico parametro passato alla funzione RpcServerInqBindings è un puntatore a un puntatore a una struttura RPC_BINDING_VECTOR. La libreria di runtime RPC alloca dinamicamente una matrice di vettori di associazione e archivia l'indirizzo della matrice in tale variabile di parametro ( in questo caso rpcBindingVector). Dopo che l'app server ha terminato di usare tale vettore di associazione (ad esempio, dopo averlo passato alle funzioni appropriate), l'app server è responsabile della liberazione di tale vettore di associazione usando la funzione RpcBindingVectorFree.