Mantendo o estado no servidor entre chamadas
Geralmente, é necessário manter o estado no servidor entre chamadas RPC separadas– usar identificadores de contexto é a melhor maneira de fazer isso. Algumas palavras sobre como os identificadores de contexto operam internamente ajudam a entender quando os identificadores de contexto funcionam melhor.
O cliente nunca recebe o estado mantido no servidor. Na maioria das vezes, o estado no servidor é um ponteiro para um bloco de memória e o cliente não tem informações sobre ele. Tudo o que o cliente recebe é um grande número exclusivo, com outras informações associadas a ele, que o servidor envia ao cliente e que representa o identificador de contexto em todas as operações subsequentes. Sempre que o cliente se refere a um identificador aberto, ele envia o grande número recebido do servidor quando esse identificador de contexto foi aberto.
O servidor controla todos os números grandes que envia a um cliente. Quando o servidor recebe um número grande que representa um identificador de contexto, ele pesquisa o número na coleção de identificadores de contexto válidos e pendentes para esse cliente e localiza o contexto do lado do servidor correspondente a um determinado número grande. Isso é passado para a rotina do servidor. Se o número grande não for encontrado, uma exceção RPC_X_SS_CONTEXT_MISMATCH será gerada e propagada para o cliente.
Os corolários desse design são os seguintes:
- Um identificador de contexto é válido somente no contexto da sessão de cliente/servidor existente. Ele não pode ser passado para outro cliente.
- Um identificador de contexto se torna inválido se o servidor é reinicializado ou, de outra forma, perde a conexão com o cliente.
- O cliente não pode interpretar o que o identificador de contexto representa no servidor. Para um cliente, todos os identificadores de contexto são simplesmente números grandes.
Se o cliente falhar, o servidor receberá uma notificação e limpo seus identificadores de contexto usando o mecanismo de execução.