The Versioning Theory for RPC and COM
Nur zwei völlig nicht verunsicherte Methoden unterstützen neue Funktionen ohne Risiko von Problemen mit der Kabelkompatibilität:
- Ändern Sie die Schnittstellenversion gemäß den Regeln. Dies verhindert, dass neue Clients mit einem alten Server kommunizieren, und verhindert möglicherweise, dass ein alter Client mit dem neuen Server kommuniziert. Dies wird weiter unten in diesem Abschnitt erläutert.
- Führen Sie eine andere Schnittstelle ein, die mit der neuen Funktionalität zu tun hat.
Eine RPC-Standardschnittstelle wird durch eine Kombination aus GUID und Versionsnummer identifiziert. eine COM-Schnittstelle wird durch ihre GUID identifiziert. Die Version besteht aus Haupt- und Nebenteilen. Bei Standardschnittstellen mit derselben GUID und unterschiedlichen Versionsnummern ist eine Verbindung nur möglich, wenn die Hauptversion identisch ist und der Client nicht höher als die Nebenversion des Servers ist.
Eine Folge ist, dass das Ändern der RPC-Schnittstellen-GUID die Kabelkompatibilität unterbricht, während das Ändern des Schnittstellennamens dies nicht tut.
In rpc-Standard ist ein Pfad für Upgrades und Erweiterungen klar definiert und erfordert im Grunde, dass neue Methoden nur am Ende der Schnittstelle hinzugefügt und neue Typen nur in den neuen Methoden verwendet werden. Wenn solche Ergänzungen erforderlich sind, muss die Nebenversion erhöht werden. Jede andere Änderung erfordert eine Änderung der Hauptversion, da die Client- und Serversoftware inkompatibel ist. Die Einhaltung dieser Regeln stellt sicher, dass beide Seiten vollständig kompatibel sind, wenn eine Verbindung zwischen einem neuen Client und einem alten Server besteht oder umgekehrt.
Für eine COM-Schnittstelle kann das Versionsattribut nicht verwendet werden. Das Erstellen neuer Schnittstellen und das Erben von den alten Schnittstellen entspricht der Bearbeitung der Version in RPC. In der Regel ist der beste Ansatz in COM das Erstellen einer neuen Schnittstelle für die erweiterte Funktionalität. Eine Entsprechung der Nebenversion ist die neue Schnittstelle, die von der alten erbt. Das Ändern alter Methoden oder alter Datentypen erfordert eine völlig neue COM-Schnittstelle– eine Schnittstelle, die nicht von der alten erbt.
Für COM ist die QueryInterface-Funktion eine bewährte Methode, um zu überprüfen, ob ein Server eine Schnittstelle unterstützt. Daher können Situationen, in denen ein Client mit einer alten oder einer neuen Version einer Schnittstelle sprechen kann, problemlos gelöst werden.