Compartilhar via


A Teoria do Controle de Versão para RPC e COM

Apenas dois métodos completamente à prova de falhas dão suporte a novas funcionalidades sem risco de problemas de compatibilidade de fio:

  • Alterar a versão da interface de acordo com as regras; isso impede que novos clientes se comuniquem com um servidor antigo e podem ou não impedir que um cliente antigo se comunique com o novo servidor. Isso será esclarecido posteriormente nesta seção.
  • Introduza uma interface diferente que lida com a nova funcionalidade.

Uma interface RPC padrão é identificada por uma combinação guid e número de versão; uma interface COM é identificada por seu GUID. A versão consiste em partes principais e secundárias. Para interfaces padrão com o mesmo GUID e números de versão diferentes, uma conexão só é possível quando a versão principal é a mesma e o cliente não é maior que a versão secundária do servidor.

Uma consequência é que a alteração do GUID da interface RPC interrompe a compatibilidade do fio, enquanto a alteração do nome da interface não.

No RPC padrão, um caminho para atualizações e extensões é bem definido e basicamente requer que novos métodos sejam adicionados somente no final da interface e novos tipos sejam usados apenas nos novos métodos. Se essas adições forem necessárias, a versão secundária deverá ser aumentada. Qualquer outra alteração requer uma alteração na versão principal, pois o software cliente e servidor seria incompatível na transmissão. Aderir a essas regras garante que sempre que houver uma conexão entre um novo cliente e um servidor antigo, ou vice-versa, ambos os lados são totalmente compatíveis.

Para uma interface COM, o atributo de versão não pode ser usado. Criar novas interfaces e herdar das interfaces antigas é equivalente à manipulação da versão no RPC. Normalmente, a melhor abordagem no COM é criar uma nova interface para a funcionalidade expandida. Um equivalente à versão secundária é a nova interface herdada da antiga. A alteração de métodos antigos ou tipos de dados antigos requer uma interface COM totalmente nova, uma interface que não herda da antiga.

Para COM, a função QueryInterface é um método estabelecido para verificar se um servidor dá suporte a uma interface; portanto, as situações em que um cliente pode falar com uma versão antiga ou nova de uma interface podem ser facilmente resolvidas.