Condividi tramite


Specifica degli endpoint

Un endpoint è un indirizzo specifico della rete di un processo server per le chiamate di procedura remota. Il nome effettivo dell'endpoint dipende dalla sequenza di protocolli usata. Ad esempio, TCP, UDP e HTTP usano porte. Le pipe denominate usano un nome di pipe denominato. Le applicazioni client/server possono usare un endpoint noto o un endpoint dinamico. Questa sezione presenta le tecniche usate dai programmi server per specificare endpoint noti e dinamici. Le informazioni sono illustrate negli argomenti seguenti:

Specifica di endpoint noti

Quando il server usa un endpoint noto, può includere i dati dell'endpoint come parte della voce del database del servizio nome. In tal caso, l'handle di associazione del client contiene un indirizzo server completo che include l'endpoint noto quando il client importa l'handle di associazione dalla voce del server.

Il programma server può anche specificare endpoint noti contemporaneamente specifica le sequenze di protocolli. Richiamare la funzione RpcServerUseProtseqEp o RpcServerUseProtseqEpEx . La differenza tra i due è che la seconda funzione ha un parametro aggiuntivo che il server può usare per controllare l'allocazione dinamica della porta.

Se il programma server specifica le informazioni sull'endpoint in questo modo, deve anche chiamare la funzione RpcEpRegister per registrare l'endpoint nella mappa dell'endpoint. Anche se l'endpoint è sempre lo stesso, il client può usare la mappa dell'endpoint per trovare il server.

Come le sequenze di protocolli, un'applicazione può specificare le informazioni sull'endpoint nel file IDL. Quando lo esegue, deve registrare sia le sequenze di protocolli che gli endpoint contemporaneamente richiamando la funzione RpcServerUseAllProtseqsIf o RpcServerUseAllProtseqsIf . In questo caso, il client ha accesso alle informazioni sull'endpoint tramite la specifica dell'interfaccia nel file IDL. Pertanto, non è necessario chiamare la funzione RpcEpRegister .

Specifica degli endpoint dinamici

Un endpoint dinamico è un endpoint assegnato al computer host del server quando il server inizia l'esecuzione. La maggior parte delle applicazioni server usa endpoint dinamici per evitare conflitti con altri programmi sul numero limitato di porte disponibili nel sistema computer host server. Tuttavia, i programmi che usano pipe denominate o la sequenza di protocollo ncalrpc hanno uno spazio di nome endpoint molto grande. Traggono vantaggio da endpoint dinamici rispetto ai programmi che usano altri trasporti.

I programmi server registrano endpoint dinamici in un database del mapping degli endpoint. Se si vuole che il server usi qualsiasi endpoint disponibile, chiamare RpcServerUseAllProtSeqs, RpcServerUseAllProtseqsEx, RpcServerUseProtseq o RpcServerUseProtseqEx. In questo modo viene impostata la libreria di runtime RPC per l'uso di tutte o una sequenza di protocolli valida con endpoint dinamici. Il server deve quindi chiamare RpcServerInqBindings per ottenere un set di handle di binding validi. Il server passa il set di handle di associazione o vettore di associazione alla funzione RpcEpRegister per registrare tutti gli endpoint appropriati nella mappa degli endpoint. Per ogni chiamata eseguita dal server a RpcEpRegister, deve essere presente una chiamata corrispondente a RpcBindingVectorFree per rilasciare la memoria usata dal vettore di associazione.

Si noti che i programmi server possono usare la funzione RpcEpRegisterNoReplace anziché RpcEpRegister. I programmi in genere usano RpcEpRegisterNoReplace quando più copie di un programma server devono essere eseguite in un sistema host server.

Sia le funzioni RpcEpRegister che RpcEpRegisterNoReplace aggiungono le interfacce e gli handle di associazione del server al database del mapper dell'endpoint. Quando il client esegue una chiamata di procedura remota usando un handle parzialmente associato, la libreria di runtime del client chiede al mapper dell'endpoint del computer del server l'endpoint di un'istanza del server compatibile. La libreria client fornisce l'interfaccia UUID, la sequenza di protocolli e, se presente, l'oggetto UUID nell'handle di associazione client. Il mapper endpoint cerca una voce di database corrispondente alle informazioni del client. L'UUID dell'interfaccia client/server, la versione principale dell'interfaccia e la sequenza di protocollo devono corrispondere esattamente. Inoltre, la versione secondaria dell'interfaccia del server deve essere maggiore o uguale alla versione secondaria del client.

Se tutti i test hanno esito positivo, il mapper dell'endpoint restituisce l'endpoint valido e la libreria di runtime client aggiorna l'endpoint nell'handle di associazione.

Gli endpoint dinamici vengono eliminati automaticamente dal database del mapper dell'endpoint quando il processo del server non viene eseguito. È possibile rimuovere l'endpoint dal database del mapper dell'endpoint prima dell'uscita dal programma server usando la funzione RpcEpUnregister oppure è possibile consentire la pulizia automatica per gestire la rimozione dell'endpoint.