Freigeben über


Kontexthandles

Es ist manchmal der Fall, dass verteilte Anwendungen das Serverprogramm benötigen, um Statusinformationen zwischen Clientaufrufen zu verwalten. Serverprogramme, die jeweils mehrere Clients bedienen, müssen die Statusinformationen für jeden Client beibehalten. Da der Client und der Server unterschiedliche Adressräume auf verschiedenen Computern verwenden und sie nicht notwendigerweise einander vertrauen, funktionieren häufig allgemeine Ansätze für die Datenfreigabe nicht. Beispielsweise können der Client und der Server keine Statusinformationen zu ihrer Remotesitzung in globalen Variablen verwalten, da sie nicht denselben globalen Adressraum verwenden. Es ist schwierig, die Informationen in einer freigegebenen Datei beizubehalten, da sie auf verschiedenen Computern ausgeführt werden. Ein vereinfachter Ansatz kann sein, den gesamten Zustand an den Client zu senden und den Client beim nächsten Aufruf zurückzugeben, aber dieser Ansatz weist Fehler auf: Der Server vertraut dem Client nicht unbedingt, den richtigen Zustand zurückzugeben, und der Zustand kann implizit an einen anderen Zustand auf dem Server gebunden sein, z. B. Dateihandles oder geöffnete Sockets.

Microsoft RPC bietet einen leistungsfähigen und sicheren Mechanismus, der als Kontexthandles bezeichnet wird, um den Status eines bestimmten Clients auf einem Server zu erhalten. Die Statusinformationen werden als Kontext des Servers bezeichnet. Clients können ein Kontexthandle abrufen, um den Kontext des Servers für die einzelnen RPC-Sitzungen zu identifizieren.

Beispielsweise kann jeder Client in einer verteilten Anwendung über das Serverprogramm verfügen, eine Datendatei für die RPC-Sitzung zu erstellen und zu aktualisieren. Der Server kann das Dateihandle für die Datendatei jedes Clients als Kontexthandle verwenden. Jedes Mal, wenn ein Client Vorgänge in der Datendatei anfordert, die der Server dafür erstellt, übergibt der Client das Kontexthandle an den Server. Der Client erhält das Dateihandle nicht selbst; es erhält ein undurchsichtiges Token, das die RPC-Laufzeit des Servers eindeutig mit dem Dateihandle verknüpfen kann. Da das Kontexthandle wirklich ein Dateihandle ist, ist das Kontexthandle nur im Adressraum des Servers sinnvoll. Das Clientprogramm kann jedoch das Kontexthandle verwenden, um dem Server mitzuteilen, auf welcher Datei Updates ausgeführt werden sollen.

Andere Daten können auch Kontexthandles sein. Beispielsweise kann ein Client und server eine Datensatznummer eines Datenbankdatensatzes als Dateihandle verwenden. Wenn der Client eine Reihe von Aktualisierungen für einen bestimmten Datensatz durchführen muss, kann er die Datensatznummer als Kontexthandle abrufen. Sie würde die Datensatznummer jedes Mal an den Server übergeben, wenn sie eine Remoteprozedur aufgerufen hat, um den Datenbankdatensatz zu aktualisieren.

Meistens verweist ein Kontexthandle auf einen Speicherblock auf dem Server, auf dem der Server verschiedene Verwaltungsinformationen speichert.

Dieser Abschnitt enthält Informationen zum Definieren und Verwenden von Kontexthandles. Die Diskussion wird in den folgenden Themen vorgestellt: