Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico discute a semântica de falha para identificadores de contexto.
Falha de semântica ao fechar o identificador de contexto falhar
Imagine que um aplicativo cliente está tentando fechar um identificador de contexto aberto no servidor, sem desligar o processo do cliente. Além disso, suponha que a chamada para o servidor para fechar o identificador de contexto falhe (por exemplo, o cliente está sem memória). A maneira adequada de lidar com essa situação é chamar a funçãoRpcSsDestroyClientContext. Nesse caso, o cliente limpa o lado do identificador de contexto e fecha anulativamente a conexão com o servidor. Como a conexão é realmente um pool de conexões (consulte RPC e ode Rede), que é contado por referência com uma referência para cada identificador de contexto ou associação aberta, destruir o identificador de contexto chamando a função RpcSsDestroyClientContext não realmente destrói a conexão. Em vez disso, diminui a contagem de referência para o pool de conexões. Para que as conexões no pool sejam fechadas, o cliente precisa fechar todos os identificadores de associação e identificadores de contexto para esse servidor do processo do cliente. Em seguida, todas as conexões no pool são fechadas e o mecanismo de run-down do servidor é iniciado e limpo.
Semântica de falha durante a alteração do estado do identificador de contexto
As informações nesta seção referem-se ao Windows XP e às plataformas posteriores.
Identificadores de contexto são simplesmente parâmetros para uma função. Todas as alterações no estado de um identificador de contexto ocorrem quando os parâmetros são marshaled ou não gravados. Por exemplo, se um cliente abrir um identificador de contexto (alterá-lo de NULL paraNULL), o tempo de execução do RPC não abrirá a parte RPC do identificador até que os argumentos sejam empacotados para enviar ao cliente. Falhas podem ocorrer durante o período provisório. Devido a uma variedade de condições possíveis de rede ou de recursos baixos, a transmissão do pacote para o cliente pode falhar. Ou a rotina do servidor pode gerar uma exceção ao tentar alterar um identificador de contexto. Nessas ou em outras situações de falha, o cliente e o servidor podem obter exibições inconsistentes do identificador de contexto. Esta seção explica a regra para o estado do identificador de contexto e a responsabilidade do código do cliente e do servidor durante várias condições de falha.
Um identificador de contexto NULL chega, mas a rotina do servidor encontra uma falha e gera uma exceção.
É responsabilidade da rotina do servidor limpar qualquer estado relacionado ao identificador de contexto que ele possa ter criado. O tempo de execução do RPC limpa seu estado.
Um identificador de contexto deNULL não chega, mas a rotina do servidor encontra uma falha e gera uma exceção.
Se a rotina do servidor fechou o identificador de contexto, o cliente não saberá sobre ele, pois a chamada não terá êxito; o uso adicional do identificador de contexto resultará em um erro de RPC_X_SS_CONTEXT_MISMATCH no cliente. Se a rotina do servidor não modificar o identificador de contexto, o cliente ainda poderá usá-lo. Se a rotina do servidor alterar as informações armazenadas no contexto do servidor, novas chamadas do cliente usarão essas informações.
Um identificador de contextoNULL não chega e a rotina do servidor fecha o identificador, mas o marshaling depois que o identificador de contexto foi empacotado falhou ou o processamento após o marshaling falhar.
O identificador de contexto é fechado e outras chamadas desse cliente usando esse identificador de contexto resultam em um erro de RPC_X_SS_CONTEXT_MISMATCH no cliente.
Um identificador de contexto NULL chega e o servidor cria seu contexto para esse identificador, mas o marshaling depois que o identificador de contexto foi marshalado falhou ou o processamento após o marshaling falhar.
Nesse caso, o tempo de execução do RPC invoca o run down para esse identificador de contexto e limpa o estado RPC para esse identificador de contexto. O identificador de contexto não será criado no lado do cliente.
Um identificador de contextoNULL não chega e o servidor não altera o identificador de contexto ou altera as informações armazenadas no contexto do servidor e o marshaling falha depois que o identificador de contexto é marshalado.
Novas chamadas do cliente usarão o identificador de contexto que o servidor tem.
Um identificador de contexto NULL chega e o servidor não o define como nada além de NULL, mas a chamada falha antes que o identificador de contexto seja marshalado.
Nesse caso, nenhum identificador de contexto é criado no cliente.
Um identificador de contextoNULL não chega e o servidor o define como NULL, mas o marshaling falha antes que o identificador de contexto seja marshalado.
Nesse caso, o identificador de contexto permanece fechado no servidor e o cliente recebe RPC_X_SS_CONTEXT_MISMATCH erros quando tenta usar o identificador de contexto.
Um identificador de contexto NULL chega ao servidor e o servidor o define como nãoNULL, mas o marshaling falha antes que o identificador de contexto seja marshalado.
O identificador de contexto é executado para baixo deve ser invocado para que o servidor possa limpar e nenhum identificador de contexto será criado no cliente.
Um identificador de contextoNULL não chega e o servidor não altera o identificador de contexto ou altera as informações armazenadas no contexto do servidor e o marshaling falha antes que o identificador de contexto seja marshalado.
Novas chamadas do cliente usarão o estado no servidor.
Um identificador de contexto é declarado como um valor retornado e a rotina do servidor retorna NULL para o identificador de contexto e o marshaling falha antes que o identificador de contexto seja marshaled.
Nesse caso, nenhum novo contexto é criado no cliente.
Um identificador de contexto é declarado como um valor retornado e a rotina do servidor retornaNULL não para o identificador de contexto e o marshaling falha antes que o identificador de contexto seja marshalado.
O tempo de execução do RPC chama a rotina de run-down do identificador de contexto para dar a ele a chance de limpar e nenhum novo contexto é criado no cliente.