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. Tcp, UDP und HTTP verwenden beispielsweise Ports. Benannte Pipes verwenden einen benannten Pipenamen. Client-/Serveranwendungen können einen bekannten Endpunkt oder einen dynamischen Endpunkt verwenden. In diesem Abschnitt werden die Techniken vorgestellt, 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 seines Namensdienstdatenbankeintrags einschließen. Wenn dies der Fall ist, enthält das Bindungshandle des Clients eine vollständige Serveradresse, die den bekannten Endpunkt enthält, wenn der Client das Bindungshandle aus dem Servereintrag importiert.
Ihr Serverprogramm kann auch bekannte Endpunkte angeben, während es Protokollsequenzen angibt. Rufen Sie entweder die Funktion RpcServerUseProtseqEp oder RpcServerUseProtseqEpEx auf. Der Unterschied besteht darin, dass die letztere Funktion über einen zusätzlichen Parameter verfügt, den Ihr Server zum Steuern der dynamischen Portzuordnung verwenden kann.
Wenn Ihr Serverprogramm die Endpunktinformationen auf diese Weise angibt, sollte es auch die RpcEpRegister-Funktion aufrufen, um den Endpunkt in der Endpunktzuordnung zu registrieren. Auch wenn der Endpunkt immer gleich ist, kann der Client die Endpunktzuordnung verwenden, um den Server zu suchen.
Wie Protokollsequenzen kann eine Anwendung Endpunktinformationen in ihrer IDL-Datei angeben. Wenn dies der Fall ist, sollten die Protokollsequenzen und Endpunkte gleichzeitig registriert werden, indem die Funktion RpcServerUseAllProtseqsIf oder RpcServerUseAllProtseqsIfEx aufgerufen wird. 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 aufzurufen.
Angeben dynamischer Endpunkte
Ein dynamischer Endpunkt ist ein Endpunkt, den der Serverhostcomputer zuweist, 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 Endpunktnamenraum. 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 RpcServerUseProtseqEx auf. 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 eine Reihe gültiger Bindungshandles abzurufen. Der Server übergibt die Bindungshandles oder den 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 vorhanden sein, um den arbeitsspeicher freizugeben, den der Bindungsvektor verwendet.
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 Funktionen RpcEpRegister als auch RpcEpRegisterNoReplace fügen der Endpunktzuordnungsdatenbank die Schnittstellen und Bindungshandles des Servers hinzu. Wenn der Client einen Remoteprozeduraufruf mit einem teilweise gebundenen Handle ausgibt, fragt die Laufzeitbibliothek des Clients den Endpunktzuordnungs-Mapper des Servercomputers nach dem Endpunkt eines kompatiblen Servers instance. Die Clientbibliothek stellt die Schnittstellen-UUID, die Protokollsequenz und, falls vorhanden, die Objekt-UUID im Clientbindungshandle bereit. Die Endpunktzuordnung sucht nach einem Datenbankeintrag, der den Informationen des Clients entspricht. Die Client/Server-Schnittstellen-UUID, die Hauptversion der Schnittstelle und die Protokollsequenz müssen alle exakt übereinstimmen. Darüber hinaus muss die Nebenversion des Servers 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 Clientlaufzeitbibliothek aktualisiert den Endpunkt im Bindungshandle.
Dynamische Endpunkte werden automatisch aus der Endpunktzuordnungsdatenbank gelöscht, wenn der Serverprozess nicht mehr ausgeführt wird. Sie können entweder den Endpunkt aus der Endpunktzuordnungsdatenbank entfernen, bevor das Serverprogramm mit der RpcEpUnregister-Funktion beendet wird, oder Sie können die automatische Bereinigung zulassen, um das Entfernen des Endpunkts zu verwalten.