Frage

In einer Terminal -Server -Sitzung funktionieren einige Standard -IPC -Technologien möglicherweise nicht wie in einer einzelnen Benutzerumgebung, da die erforderlichen Ressourcen werden nicht virtualisiert.

Beispielsweise werden TCP/IP -Ports nicht virtualisiert, sodass Anwendungen in verschiedenen Sitzungen, die versuchen, auf demselben Port zu hören, einen Portkonflikt verursachen.

Welche IPC -Technologie wird in einer Terminalserver -Umgebung funktionieren, wo Anwendungen, die in derselben Benutzersitzung ausgeführt werden müssen interagieren?

  • Nachrichten (wm_copyData)?
  • Benannte Pfeifen?
  • DDE?
  • Speicher zugeordnete Dateien?
War es hilfreich?

Lösung

Nachrichten funktionieren gut. Dde wird auch, da es auf Nachrichten basiert. Benannte Pfeifen Will nicht, da sie pro System und nicht pro Sitzung sind. Sie können auch COM oder OLE betrachten.

Andere Tipps

Alle IPCs können in einer TS -Umgebung verwendet werden - Sie müssen nur klug in der Benennung der Objekte eingehen, um das erforderliche Endergebnis zu erreichen. Die Verwendung von Steckdosen ist schwieriger, aber es kann getan werden. Ich habe unten einige Methoden aufgeführt.

Für IPC -Objekte, die benannt werden können (Pipe, Ereignis, Mutex, Speicher zugeordnetes Datei usw.), in dem die Sitzungs -ID in den Namen des Objekts einbezogen wird Virtualisierung erforderlich. Um das IPC -Objekt weiter zu sperren, verwenden Sie die Sicherheitsattribute des Objekts, um zu verhindern, dass ein anderer Benutzer auf das IPC -Objekt zugreift. Dies kann versehentlich aufgrund eines Fehlers oder böswillig von einem anderen Benutzer auf dem Terminalserver erfolgen.

Verwenden Sie in ähnlicher Weise die angemeldete Authentifizierungs -ID des Benutzers im Namen des IPC -Objekts. In C ++ siehe msdn auf GettokenInformation Verwenden Sie Tokenstatistics für die TokeninformationClass. Ich bin sicher, dass es eine äquivalente .NET -Methode gibt. Sichern Sie sich erneut das IPC -Objekt.

Wenn Sie Sockets auf einem TS verwenden müssen (ich persönlich würde eine andere Methode auswählen, um zwischen Anwendungen auf einem TS zu kommunizieren), verwenden Sie die Portnummern. Wählen Sie eine Basisportnummer aus und fügen Sie die Sitzungsnummer hinzu, um den für eine Sitzung verwendeten Port zu erhalten. Um sicherzustellen, dass die korrekten Anwendungen kommunizieren, verwenden Sie eine Authentifizierungsmethode und/oder Handschütteln, bevor Sie Daten übertragen. Theoretisch können Sitzungen bis zu 65535 nummeriert werden, sodass Sie möglicherweise nicht mehr auftreten, wenn Sie eine Basisportnummer von Say 2000 verwenden, und die Sitzung Ihre Bewerbung wird in Sitzung 65500 ausgeführt. Wenn Sie wirklich Sockets verwenden möchten, würde ein Broker -Service möglicherweise helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top