Condividi tramite


Interfacce server Advertising

Il lato server di un'applicazione che usa handle automatici deve chiamare la funzione RpcNsBindingExport per rendere disponibili ai client le informazioni di associazione sul server. Gli handle di associazione automatica richiedono un servizio dei nomi in esecuzione in un server accessibile al client. L'implementazione Microsoft del servizio dei nomi, Microsoft Locator, gestisce gli handle automatici. Le applicazioni server che usano handle di associazione impliciti ed espliciti possono anche annunciare la loro presenza nel database del servizio dei nomi.

In genere, il server chiama le funzioni di runtime seguenti:

/* auto handle server application (fragment) */
 
//interface header file that the MIDL compiler generates
#include "auto.h" 
 
void main(void)
{
    RpcUseProtseqEp(...);
    RpcServerRegisterIf(...);
    RpcServerInqBindings(...);
    RpcNsBindingExport(...);
    ...
}

Le chiamate alle prime due funzioni in questo frammento di codice sono simili all'esempio Hello, World. Queste funzioni rendono disponibili informazioni sull'associazione al client. Le chiamate a RpcServerInqBindings e RpcNsBindingExport inserisce le informazioni nel database del servizio dei nomi. La chiamata a RpcServerInqBindings riempie il vettore di associazione con handle di associazione validi prima che gli handle vengano esportati nel servizio dei nomi. Dopo che il programma server esporta gli handle nel database, il client (o gli stub client) può chiamare RpcNsBindingImportBegin e RpcNsBindingImportNext per ottenere queste informazioni. Per informazioni dettagliate, vedere Ricerca di sistemi host server.

Le chiamate a RpcServerInqBindings e RpcNsBindingExport e le relative strutture di dati associate sono simili alle seguenti:

RPC_BINDING_VECTOR * pBindingVector;
RPCSTATUS status;
 
status = RpcServerInqBindings(&pBindingVector);
 
status = RpcNsBindingExport(
                fNameSyntaxType,      // name syntax type 
                pszAutoEntryName,     // nsi entry name 
                autoh_ServerIfHandle, // if server handle
                pBindingVector,       // set in previous call 
                NULL);                // UUID vector

Si noti che il parametro RpcServerInqBindingspBindingVector è un puntatore a un puntatore a RPC_BINDING_VECTOR. Tenere inoltre presente che ogni chiamata a RpcNsBindingExport deve essere seguita da una chiamata a RpcBindingVectorFree.

Per rimuovere l'interfaccia esportata dal database del servizio dei nomi, il server chiama RpcNsBindingUnexport come illustrato:

status = RpcNsBindingUnexport(
                fNameSyntaxType, 
                pszAutoEntryName,  
                auto_ServerIfHandle,
                NULL);              // unexport handles only

La funzione RpcNsBindingUnexport deve essere usata solo quando il servizio viene rimosso definitivamente. Non deve essere usato quando il servizio è temporaneamente disabilitato, ad esempio quando il server viene arrestato per la manutenzione. Un programma server può registrarsi con il database del servizio dei nomi, ma non è disponibile perché il server è temporaneamente offline. L'applicazione client deve contenere codice di gestione delle eccezioni per una condizione di questo tipo.

Per altre informazioni sul contenuto e sul formato del database del servizio dei nomi, vedere Database del servizio dei nomi RPC.

Le applicazioni possono utilizzare il servizio Active Directory se i programmi client e server sono in esecuzione in Windows 2000. I computer che eseguono i programmi client e server devono essere entrambi membri di un dominio Di Windows 2000.

Per annunciare la propria presenza tramite il servizio Active Directory, il programma server deve essere eseguito nel contesto di sicurezza di un amministratore di dominio. Se è in esecuzione nel contesto degli utenti di dominio, un amministratore di dominio deve modificare l'elenco di controllo di accesso (ACL) nel contenitore servizi RPC. Per altre informazioni, vedere la documentazione di Active Directory.