Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Sempre que possível, implemente uma nova interface para seu aplicativo, em vez de fazer alterações em uma existente. Se você não puder evitar a alteração de uma interface existente, use novos tipos de dados somente em novos métodos. A introdução de um novo tipo de dados ou a modificação de um tipo existente é a fonte mais comum de problemas de incompatibilidade. O modelo de tempo de execução RPC pressupõe que o aplicativo recetor sabe sobre os tipos de dados que recebe, portanto, os dados são colocados no fio sem uma descrição genérica de dados. Quando o destinatário espera um tipo de dados diferente do que o remetente colocou no fio, o stub gera uma exceção (ou a transmissão falha de alguma outra maneira menos graciosa).
Uma interface RPC é definida por seu UUID e seus números de versão principal e secundária. Quando você altera uma interface existente, você deve adicionar os novos métodos no final da interface e alterar o número da versão secundária. Se você adicionar métodos em qualquer outro lugar ou fizer quaisquer outras alterações na interface, também precisará alterar o número da versão principal.
Realisticamente, há momentos em que você não pode alterar até mesmo o número da versão secundária, porque um novo cliente não será capaz de se comunicar com um servidor antigo e você não pode atualizar o servidor. O tempo de execução RPC gera uma exceção, RPC_S_PROCNUM_OUT_OF_RANGE, quando um cliente chama um método além dos especificados para sua interface com o servidor. A solução alternativa é deixar os números de versão inalterados e escrever o código do cliente para lidar com essa exceção com elegância — por exemplo, reduzindo o desempenho do cliente, ou por qualquer outro meio apropriado para a sua aplicação.
Há uma solução semelhante para um caso especial de alteração de um tipo de dados em um método existente. Se tiver uma união cujos ramos são ponteiros e que não tem um ramo padrão para tipos não reconhecidos, pode adicionar um novo ramo que utilize o novo tipo de dados. Isso não alterará o tamanho da estrutura de dados. Quando o cliente fala com um novo servidor, ele pode usar o novo tipo de dados. No entanto, quando o cliente fala com um servidor antigo, o tempo de execução gerará a exceção RPC_S_INVALID_TAG. Novamente, você precisará escrever o código do cliente para lidar com essa exceção adequadamente.
Uma interface DCOM é identificada por seu GUID. No DCOM, as interfaces são consideradas imutáveis e você pode fazer alterações apenas criando uma nova interface que herda da antiga. Essas regras garantem que clientes e servidores permaneçam compatíveis.