Partilhar via


Interfaces do servidor de publicidade

O lado do servidor de um aplicativo que usa identificadores automáticos deve chamar a função RpcNsBindingExport para disponibilizar informações de associação sobre o servidor aos clientes. Os identificadores de associação automática exigem um serviço de nome em execução em um servidor acessível ao cliente. A implementação da Microsoft do serviço de nome, Microsoft Locator, gerencia identificadores automáticos. Aplicativos de servidor que usam identificadores de associação implícitos e explícitos também podem anunciar sua presença no banco de dados de serviço de nome.

Normalmente, o servidor chama as seguintes funções de tempo de execução:

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

As chamadas para as duas primeiras funções nesse fragmento de código são semelhantes ao exemplo Olá, Mundo. Essas funções disponibilizam informações sobre a associação para o cliente. As chamadas para RpcServerInqBindings e RpcNsBindingExport colocam as informações no banco de dados de serviço de nome. A chamada para RpcServerInqBindings preenche o vetor de associação com identificadores de associação válidos antes que os identificadores sejam exportados para o serviço de nome. Depois que o programa de servidor exporta os identificadores para o banco de dados, o cliente (ou stubs de cliente) pode chamar RpcNsBindingImportBegin e RpcNsBindingImportNext para obter essas informações. Para obter detalhes, consulte Localizando sistemas de host do servidor.

As chamadas para RpcServerInqBindings e RpcNsBindingExport e suas estruturas de dados associadas são semelhantes às seguintes:

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

Observe que o parâmetro RpcServerInqBindingspBindingVector é um ponteiro para um ponteiro para RPC_BINDING_VECTOR. Lembre-se também de que cada chamada para RpcNsBindingExport deve ser seguida por uma chamada para RpcBindingVectorFree.

Para remover a interface exportada do banco de dados de serviço de nome, o servidor chama RpcNsBindingUnexport conforme mostrado:

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

A função RpcNsBindingUnexport deve ser usada somente quando o serviço está sendo removido permanentemente. Ele não deve ser usado quando o serviço está temporariamente desabilitado, como quando o servidor é desligado para manutenção. Um programa de servidor pode se registrar com o banco de dados de serviço de nome, mas não estar disponível porque o servidor está temporariamente offline. O aplicativo cliente deve conter código de tratamento de exceção para essa condição.

Para obter mais informações sobre o conteúdo e o formato do banco de dados de serviço de nome, consulte O Banco de Dados de Serviço de Nome RPC.

Os aplicativos poderão utilizar o serviço do Active Directory se os programas cliente e servidor estiverem em execução no Windows 2000. Os computadores que executam os programas cliente e servidor devem ser membros de um domínio do Windows 2000.

Para anunciar sua presença usando o serviço Active Directory, o programa de servidor deve ser executado no contexto de segurança de um administrador de domínio. Se estiver em execução no contexto de usuários de domínio, um administrador de domínio deverá modificar a ACL (lista de controle de acesso) no contêiner RPC Services. Para obter mais informações, consulte a documentação do Active Directory.