Freigeben über


Client/Server-Anwendungsrichtlinien

Client-/Serveranwendungen dürfen nicht davon ausgehen, dass eine einzelne Computerverbindung einer einzelnen Benutzersitzung entspricht. Dies ist ein Sonderfall des Themas, das in IP-Adressen und Computernamenbehandelt wird.

Um eine Client-/Serververbindung eindeutig zu identifizieren, muss jedes Clientmodul einen eindeutigen Namen oder Bezeichner verwenden. Anwendungen können benannte Objekte oder Rohre, Sockets oder andere IPC-Methoden verwenden. Weitere Informationen finden Sie unter Kernel Object Namespaces.

Damit Die Remotedesktopdienste kompatibel sind, muss das Servermodul in einer Client-/Serveranwendung mehrere Clients verarbeiten können, die über denselben Computer verbunden sind. Dazu muss das Servermodul Clientverbindungen über eine gut definierte globale Schnittstelle akzeptieren, z. B. RPC oder benannte Rohre. Der Server und der Client müssen für jede Benutzersitzung einen anderen Kommunikationskanal aushandeln. Der Client muss eine Verbindung mit dem Server herstellen, indem Protokolle verwendet werden, die diesen Vorgangstyp, z. B. TCP/IP, problemlos unterstützen, wobei für jede Clientanwendung eine andere Socketverbindung verwendet werden kann.

Das Clientmodul kann die ProcessIdToSessionId--Funktion aufrufen, um den Bezeichner der Remotedesktopdienste-Sitzung abzurufen. Der Client verwendet dann eine Form der Interprocess-Kommunikation, um seinen Sitzungsbezeichner an das Servermodul zu übergeben. Die Client- und Servermodule können dann den Sitzungsbezeichner verwenden, um einen privaten Kommunikationskanal einzurichten. Beispielsweise kann das Servermodul einen Sitzungsbezeichner verwenden, um auf Objekte im Namespace der Sitzung für Kernelobjekte zuzugreifen.

Darüber hinaus kann das Servermodul den Sitzungsbezeichner in einem WTSQuerySessionInformation Aufruf verwenden, um zusätzliche Informationen zum Client abzurufen. Das Servermodul kann auch den Sitzungsbezeichner in einer WTSendMessage Aufruf verwenden, um eine Meldung auf dem Clientterminal anzuzeigen. Das Servermodul kann auch zwei Ereignisse erstellen, um die Clientverbindung zu überwachen und die Verbindung von einer Sitzung zu trennen. Dies muss jedoch auf dem Remotedesktopsitzungshostserver (RD-Sitzungshost) registriert werden. Weitere Informationen finden Sie unter Monitoring Session Connections and Disconnections.

Aufforderungen zur Benutzereingabe sind eine mögliche Ursache für Probleme für Client-/Serveranwendungen. Wenn beispielsweise ein Dienst die MessageBox--Funktion aufruft, wird das Meldungsfeld auf dem Desktop des RD-Sitzungshostservers und nicht auf dem Clientdesktop angezeigt. Um eine Meldung auf einem Clientdesktop anzuzeigen, kann der Dienst die WtsSendMessage--Funktion aufrufen. Alternativ kann der Dienst Eingaben vom Clientmodul anfordern, und das Clientmodul kann die Benutzeroberfläche anzeigen und die resultierende Eingabe zurück an den Dienst senden.

Prozesse, die aus mehreren Sitzungen abgerufen werden, können Daten über die Verwendung von freigegebenen Speicherblöcken aneinander senden und Daten empfangen. Weitere Informationen finden Sie unter Creating Named Shared Memory. Freigegebener Speicher kann unter den folgenden Bedingungen nicht verwendet werden:

  • Die Prozesse, die den freigegebenen Speicherblock verwenden, wurden von mehreren Sitzungen durchsucht.
  • Die Sitzungen verwenden dieselben Benutzerauthentifizierungsanmeldeinformationen.