Diretrizes de aplicativo de serviço de nome
Ao desenvolver seu aplicativo distribuído, você precisa fornecer aos usuários do aplicativo um método para especificar o nome no qual eles podem registrar o aplicativo no banco de dados de serviço de nome. Esse método pode consistir em um arquivo de dados, entrada de linha de comando ou caixa de diálogo.
Embora a arquitetura de serviço de nome RPC dê suporte a vários métodos para organizar entradas de servidor de um aplicativo, ela é otimizada para pesquisas. Como resultado, as atualizações frequentes podem dificultar o desempenho do serviço de nome e do aplicativo. Para evitar exportar informações desnecessariamente, escolha um design que permita que o servidor determine se suas informações estão no banco de dados de serviço de nome. Além disso, cada instância de servidor deve exportar para seu próprio nome de entrada. Caso contrário, será difícil para uma instância alterar seus UUIDs de objeto com suporte ou sequências de protocolo sem perturbar as informações de outra instância.
O método a seguir evita essas armadilhas e fornece um bom desempenho, independentemente do serviço de nome que sua rede usa.
Para começar, projete seu aplicativo para que, na primeira vez que uma determinada instância de servidor for iniciada, ele escolha um nome de entrada de servidor exclusivo e salve esse nome no registro junto com outras informações de configuração do aplicativo. Em seguida, faça com que ele exporte seus identificadores de associação e UUIDs de objeto, se houver, para sua entrada de serviço de nome.
As invocações subsequentes da instância de servidor devem marcar que a entrada de serviço de nome esteja presente e contenha o conjunto correto de UUIDs de objeto e identificadores de associação. Uma entrada ausente pode significar que um administrador a removeu ou que uma interrupção de energia fez com que as informações do serviço de nome fossem perdidas. É importante verificar se os identificadores de associação na entrada estão corretos; se um administrador adicionar suporte a TCP/IP a um computador, por exemplo, os servidores RPC escutarão nessa sequência de protocolo quando chamarem RpcServerUseAllProtseqs. No entanto, se o servidor não atualizar a entrada de serviço de nome, os clientes não serão informados de que há suporte para TCP.
Quando o cliente importa, ele deve especificar NULL como o nome da entrada. Especificar NULL faz com que as funções da biblioteca RPC da Microsoft pesquisem a interface em todas as entradas de serviço de nome no domínio ou grupo de trabalho do computador cliente, localizando assim as informações para cada instância.
Se você usar UUIDs de objeto para representar objetos conhecidos, como impressoras, poderá usar uma variação desse método. Em vez de exportar associações para uma entrada, projete seu aplicativo para que cada instância crie uma entrada para cada objeto com suporte, como "/.:/ printers/Laser1" e "/.:/ printers/Laser2." Em seguida, faça com que o servidor exporte seus identificadores de associação para cada entrada de servidor, juntamente com o objeto UUID relevante para essa entrada.
Nesse caso, um cliente pode pesquisar um recurso por nome importando da entrada de servidor relevante; não requer o UUID do objeto do recurso. Se ele tiver o UUID do recurso, mas não o nome, ele poderá importar da entrada nula .