Funzione RpcEpRegisterNoReplace (rpcdce.h)

La funzione RpcEpRegisterNoReplace aggiunge informazioni sull'indirizzo del server al database endpoint-map locale.

Sintassi

RPC_STATUS RpcEpRegisterNoReplace(
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVector,
  UUID_VECTOR        *UuidVector,
  RPC_CSTR           Annotation
);

Parametri

IfSpec

Interfaccia per la registrazione con il database endpoint-map locale.

BindingVector

Puntatore a un vettore di handle di associazione su cui il server può ricevere chiamate di routine remote.

UuidVector

Puntatore a un vettore di UUID oggetto offerto dal server. L'applicazione server costruisce questo vettore.

Un valore di parametro Null indica che non sono presenti UUID oggetto da registrare.

Annotation

Puntatore al commento di stringa di caratteri applicato a ogni elemento cross-product aggiunto al database endpoint-map locale. La stringa può contenere fino a 64 caratteri, incluso il carattere di terminazione Null. Specificare un valore Null o una stringa con terminazione Null ("\0") se non è presente alcuna stringa di annotazione.

La stringa di annotazione viene utilizzata dalle applicazioni solo per informazioni. RPC non usa questa stringa per determinare con quale istanza del server un client comunica o per enumerare gli elementi nel database endpoint-map.

Valore restituito

Valore Significato
RPC_S_OK
La chiamata ha avuto esito positivo.
RPC_S_NO_BINDINGS
Nessuna associazione.
RPC_S_INVALID_BINDING
Handle di associazione non valido.
RPC_S_WRONG_KIND_OF_BINDING
Si tratta del tipo di binding errato per l'operazione.
 
Nota Per un elenco di codici di errore validi, vedere Valori restituiti RPC.
 

Commenti

La funzione RpcEpRegisterNoReplace aggiunge voci al database endpoint-map dell'host locale. Questa funzione non sostituisce le voci di database esistenti.

Un server usa RpcEpRegisterNoReplace anziché RpcEpRegister quando più istanze del server verranno eseguite nello stesso host. In altre parole, usare questa funzione quando più istanze del server offriranno la stessa interfaccia UUID, UUID oggetto e sequenza di protocollo in qualsiasi momento.

Poiché le voci non vengono sostituite quando si chiama RpcEpRegisterNoReplace, i server devono annullare la registrazione prima di interrompere l'esecuzione. In caso contrario, i dati non aggiornati si accumulano ogni volta che un'istanza del server viene arrestata senza chiamare RpcEpUnregister. Le voci non aggiornate aumentano la probabilità che un client riceva gli endpoint a server inesistenti. Il client trascorrerà tempo durante il tentativo di comunicare con un server inesistente prima di ottenere un altro endpoint.

Un server può usare RpcEpRegister e RpcEpRegisterNoReplace per registrare le voci nel database del mapper dell'endpoint. Nelle versioni precedenti a Windows 2000 erano disponibili due funzioni per consentire a un server di sovrascrivere le voci non aggiornate nel database del mapper dell'endpoint lasciato dalle istanze del server precedenti che non sono più in esecuzione. Il database del mapper dell'endpoint rimuove automaticamente le voci registrate da un'istanza del server non appena il server smette di funzionare. Tuttavia, i server non sono autorizzati a sostituire le voci del mapper di endpoint di un altro server a scopo di sicurezza. Pertanto , RpcEpRegister e RpcEpRegisterNoReplace eseguono in gran parte la stessa funzionalità.

Un'applicazione server chiama RpcEpRegister per registrare gli endpoint specificati chiamando una delle funzioni seguenti:

Se il server esporta anche nel database name-service, il server chiama RpcEpRegister con gli stessi valori IfSpec, BindingVector e UuidVector utilizzati durante la chiamata alla funzione RpcNsBindingExport .

Se viene usata una sequenza di protocollo senza specificare un endpoint, la libreria di runtime RPC genera automaticamente un endpoint dinamico. In questo caso, il server può chiamare RpcServerInqBindings seguito da RpcEpRegisterNoReplace per renderlo disponibile a più client. In caso contrario, il server avviato automaticamente è noto solo al client per il quale è stato avviato il server.

Ogni elemento aggiunto al database endpoint-map contiene logicamente quanto segue:

  • UUID dell'interfaccia
  • Versione dell'interfaccia (principale e secondaria)
  • Handle di associazione
  • UUID oggetto (facoltativo)
  • Annotazione (facoltativo)
RpcEpRegisterNoReplace crea un prodotto incrociato dai parametri IfSpec, BindingVector e UuidVector e aggiunge ogni elemento nel prodotto incrociato come registrazione separata nel database di mapping degli endpoint.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione rpcdce.h (include Rpc.h)
Libreria Rpcrt4.lib
DLL Rpcrt4.dll

Vedi anche

RpcBindingFromStringBinding

RpcEpRegister

RpcEpUnregister

RpcNsBindingExport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf