Théorie du contrôle de version pour RPC et COM
Seules deux méthodes totalement infaillibles prennent en charge de nouvelles fonctionnalités sans risque de problèmes de compatibilité des câbles :
- Modifier la version de l’interface en fonction des règles ; cela empêche les nouveaux clients de communiquer avec un ancien serveur et peut ou non empêcher un ancien client de communiquer avec le nouveau serveur. Cela est précisé plus loin dans cette section.
- Introduisez une autre interface traitant de la nouvelle fonctionnalité.
Une interface RPC standard est identifiée par une combinaison GUID et numéro de version ; une interface COM est identifiée par son GUID. La version se compose de parties principales et mineures. Pour les interfaces standard avec le même GUID et des numéros de version différents, une connexion n’est possible que lorsque la version principale est identique et que le client n’est pas supérieur à la version mineure du serveur.
Une conséquence est que la modification du GUID d’interface RPC interrompt la compatibilité des câbles, alors que le changement du nom de l’interface ne le fait pas.
Dans rpc standard, un chemin d’accès pour les mises à niveau et les extensions est bien défini et nécessite essentiellement que de nouvelles méthodes soient ajoutées uniquement à la fin de l’interface, et que les nouveaux types soient utilisés uniquement dans les nouvelles méthodes. Si de tels ajouts sont nécessaires, la version mineure doit être augmentée. Toute autre modification nécessite une modification de la version principale, car le logiciel client et serveur serait incompatible sur le réseau. Le respect de ces règles garantit chaque fois qu’il existe une connexion entre un nouveau client et un ancien serveur, ou inversement, les deux côtés sont entièrement compatibles.
Pour une interface COM, l’attribut version ne peut pas être utilisé. La création de nouvelles interfaces et l’héritage des anciennes interfaces revient à manipuler la version dans RPC. En règle générale, la meilleure approche dans COM consiste à créer une nouvelle interface pour la fonctionnalité développée. La nouvelle interface qui hérite de l’ancienne est l’équivalent de la version mineure. La modification d’anciennes méthodes ou d’anciens types de données nécessite une interface COM entièrement nouvelle, une interface qui n’hérite pas de l’ancienne.
Pour COM, la fonction QueryInterface est une méthode établie pour vérifier si un serveur prend en charge une interface ; par conséquent, les situations où un client peut communiquer avec une ancienne ou une nouvelle version d’une interface peuvent être facilement résolues.