Identificadores de contexto
Às vezes, é o caso de aplicativos distribuídos exigirem que o programa de servidor mantenha status informações entre chamadas de cliente. Os programas de servidor que atenderem mais de um cliente por vez devem manter as informações de estado de cada cliente. Como o cliente e o servidor usam espaços de endereço diferentes em computadores diferentes e não necessariamente confiam uns nos outros, abordagens comuns para o compartilhamento de dados geralmente não funcionam. Por exemplo, o cliente e o servidor não conseguem manter status informações sobre sua sessão remota em variáveis globais porque não compartilham o mesmo espaço de endereço global. É difícil manter as informações em um arquivo compartilhado porque elas são executadas em computadores diferentes. Uma abordagem simplista pode ser enviar todo o estado para o cliente e fazer com que o cliente o retorne na próxima chamada, mas essa abordagem tem falhas: o servidor não necessariamente confia no cliente para retornar o estado certo e o estado pode estar implicitamente vinculado a algum outro estado no servidor, como identificadores de arquivo ou soquetes abertos.
O Microsoft RPC fornece um mecanismo poderoso e seguro chamado identificadores de contexto para manter o estado associado a um determinado cliente em um servidor. As informações de estado são chamadas de contexto do servidor. Os clientes podem obter um identificador de contexto para identificar o contexto do servidor para suas sessões RPC individuais.
Por exemplo, cada cliente em um aplicativo distribuído pode fazer com que o programa de servidor crie e atualize um arquivo de dados para sua sessão RPC. O servidor pode usar seu identificador de arquivo para o arquivo de dados de cada cliente como o identificador de contexto. Sempre que um cliente solicita operações no arquivo de dados que o servidor cria para ele, o cliente passa o identificador de contexto para o servidor. Na verdade, o cliente não obtém o próprio identificador de arquivo; ele obtém um token opaco que o tempo de execução RPC do servidor pode associar exclusivamente ao identificador de arquivo. Como o identificador de contexto é realmente um identificador de arquivo, o identificador de contexto só faz sentido no espaço de endereço do servidor. No entanto, o programa cliente pode usar o identificador de contexto para informar ao servidor em qual arquivo executar atualizações.
Outros dados também podem ser identificadores de contexto. Por exemplo, um cliente e um servidor podem usar um número de registro de um registro de banco de dados como um identificador de arquivo. Se o cliente precisasse executar várias atualizações em um registro específico, ele poderia obter o número do registro como um identificador de contexto. Ele passaria o número do registro para o servidor sempre que invocasse um procedimento remoto para atualizar o registro do banco de dados.
Na maioria das vezes, um identificador de contexto aponta para um bloco de memória no servidor em que o servidor mantém várias informações de gerenciamento.
Esta seção apresenta informações sobre como definir e usar identificadores de contexto. A discussão é apresentada nos seguintes tópicos:
- Desenvolvimento de interface usando identificadores de contexto
- Desenvolvimento de servidor usando identificadores de contexto
- Desenvolvimento de cliente usando identificadores de contexto
- Rotina de execução de contexto do servidor
- Redefinição de contexto do cliente
- Clientes multithreaded e identificadores de contexto