Angeben von Endpunkten
Ein Endpunkt ist eine netzwerkspezifische Adresse eines Serverprozesses für Remoteprozeduraufrufe. Der tatsächliche Name des Endpunkts hängt von der verwendeten Protokollsequenz ab. Beispielsweise verwenden TCP, UDP und HTTP Ports. Named Pipes verwenden einen Named Pipe-Namen. Client-/Serveranwendungen können einen bekannten Endpunkt oder einen dynamischen Endpunkt verwenden. In diesem Abschnitt werden die Techniken beschrieben, mit denen Serverprogramme bekannte und dynamische Endpunkte angeben. Die Informationen werden in den folgenden Themen erläutert:
Angeben bekannter Endpunkte
Wenn Ihr Server einen bekannten Endpunkt verwendet, kann er die Endpunktdaten als Teil des Namensdienst-Datenbankeintrags enthalten. Wenn dies der Problem ist, enthält das Bindungshand handle des Clients eine vollständige Serveradresse, die den bekannten Endpunkt enthält, wenn der Client das Bindungshand handle aus dem Servereintrag importiert.
Ihr Serverprogramm kann auch bekannte Endpunkte angeben, während es Protokollsequenzen angibt. Rufen Sie entweder die RpcServerUseProtseqEp- oder RpcServerUseProtseqEpEx-Funktion auf. Der Unterschied zwischen den beiden ist, dass die zweite Funktion über einen zusätzlichen Parameter verfügt, den Ihr Server verwenden kann, um die dynamische Portzuordnung zu steuern.
Wenn Ihr Serverprogramm seine Endpunktinformationen auf diese Weise angibt, sollte es auch die RpcEpRegister-Funktion aufrufen, um den Endpunkt in der Endpunktzuordnung zu registrieren. Obwohl der Endpunkt immer identisch ist, kann der Client die Endpunktzuordnung verwenden, um den Server zu finden.
Wie Protokollsequenzen kann eine Anwendung Endpunktinformationen in ihrer IDL-Datei angeben. In diesem Schritt sollten die Protokollsequenzen und Endpunkte gleichzeitig durch Aufrufen der RpcServerUseAllProtseqsIf- oder RpcServerUseAllProtseqsIfEx-Funktion registriert werden. In diesem Fall hat der Client über die Schnittstellenspezifikation in der IDL-Datei Zugriff auf die Endpunktinformationen. Daher ist es nicht erforderlich, die RpcEpRegister-Funktion auf aufruft.
Angeben dynamischer Endpunkte
Ein dynamischer Endpunkt ist ein Endpunkt, der vom Serverhostcomputer zugewiesen wird, wenn der Server mit der Ausführung beginnt. Die meisten Serveranwendungen verwenden dynamische Endpunkte, um Konflikte mit anderen Programmen über die begrenzte Anzahl von Ports zu vermeiden, die auf dem Serverhostcomputersystem verfügbar sind. Programme, die Named Pipes oder die ncalrpc-Protokollsequenz verwenden, verfügen jedoch über einen sehr großen Endpunktnamensraum. Sie profitieren weniger von dynamischen Endpunkten als Programme, die andere Transporte verwenden.
Serverprogramme registrieren dynamische Endpunkte in einer Endpunktzuordnungsdatenbank. Wenn der Server einen verfügbaren Endpunkt verwenden soll, rufen Sie RpcServerUseAllProtSeqs, RpcServerUseAllProtseqsEx, RpcServerUseProtseq oder RpcServerUseProtseqExauf. Dadurch wird festgelegt, dass die RPC-Laufzeitbibliothek alle oder eine gültige Protokollsequenz(en) mit dynamischen Endpunkten verwendet. Der Server sollte dann RpcServerInqBindings aufrufen, um einen Satz gültiger Bindungshandles zu erhalten. Der Server übergibt den Satz von Bindungshandles oder Bindungsvektor an die Funktion RpcEpRegister, um alle geeigneten Endpunkte in der Endpunktzuordnung zu registrieren. Für jeden Aufruf, den Ihr Server an RpcEpRegister sendet, sollte ein entsprechender Aufruf von RpcBindingVectorFree erfolgen, um den vom Bindungsvektor verwendeten Arbeitsspeicher frei zu geben.
Beachten Sie, dass Serverprogramme die RpcEpRegisterNoReplace-Funktion anstelle von RpcEpRegister verwenden können. Programme verwenden in der Regel RpcEpRegisterNoReplace, wenn mehrere Kopien eines Serverprogramms auf einem Serverhostsystem ausgeführt werden müssen.
Sowohl die RpcEpRegister- als auch die RpcEpRegisterNoReplace-Funktion fügen der Endpunktzuordnungsdatenbank die Schnittstellen und Bindungshandles des Servers hinzu. Wenn der Client eine Remoteprozedur mit einem teilweise gebundenen Handle aufruft, fragt die Laufzeitbibliothek des Clients die Endpunktzuordnung des Servercomputers nach dem Endpunkt einer kompatiblen Serverinstanz. Die Clientbibliothek stellt die Schnittstellen-UUID, die Protokollsequenz und, falls vorhanden, die Objekt-UUID im Clientbindungshand handle bereit. Die Endpunktzuordnung sucht nach einem Datenbankeintrag, der den Clientinformationen entspricht. Die UUID der Client-/Serverschnittstelle, die Hauptversion der Schnittstelle und die Protokollsequenz müssen genau übereinstimmen. Darüber hinaus muss die Nebenversion der Serverschnittstelle größer oder gleich der Nebenversion des Clients sein.
Wenn alle Tests erfolgreich sind, gibt die Endpunktzuordnung den gültigen Endpunkt zurück, und die Client-Laufzeitbibliothek aktualisiert den Endpunkt im Bindungshand handle.
Dynamische Endpunkte werden automatisch aus der Endpunktzuordnungsdatenbank gelöscht, wenn der Serverprozess nicht mehr ausgeführt wird. Sie können den Endpunkt entweder mithilfe der RpcEpUnregister-Funktion aus der Endpunktzuordnungsdatenbank entfernen, bevor das Serverprogramm beendet wird, oder Sie können die automatische Bereinigung zulassen, um das Entfernen des Endpunkts zu verwalten.