Pregunta

En una sesión de Terminal Server, algunas tecnologías estándar IPC no podrían funcionar como en un entorno de usuario único, debido a que los requeridos los recursos no se virtualizan .

Por ejemplo, los puertos TCP / IP no están virtualizados, lo que las aplicaciones en diferentes sesiones que tratan de escuchar en el mismo puerto provocará un conflicto de puertos.

¿Qué tecnología IPC va a funcionar en un entorno de Terminal Server donde aplicaciones que se ejecutan en la misma sesión de usuario que tenga que interactuar?

  • Mensajes (WM_COPYDATA)?
  • canalizaciones con nombre?
  • DDE?
  • archivos de memoria asignada?
¿Fue útil?

Solución

Los mensajes no tendrán ningún problema. DDE también lo hará, ya que se basa en mensajes. Las canalizaciones con nombre no lo hará, ya que son por -Sistema y no por sesión. También puede considerar COM u OLE.

Otros consejos

Todo IPC puede ser utilizado en un entorno TS - sólo tienes que ser inteligente en la denominación de los objetos para lograr el resultado final requerido. Uso de las tomas es más complicado, pero se puede hacer. He enumerado algunos métodos a continuación.

Para objetos IPC que pueden ser nombradas (Tubería, Evento, mutex, la memoria de archivo asignado, etc.) que incorporan el identificador de sesión en el nombre del objeto logrará el virtualización necesaria. Para bloquear más abajo en el objeto IPC utilizar los atributos de seguridad del objeto de detener la posibilidad de que otros usuarios puedan acceder al objeto IPC. Esto podría ocurrir accidentalmente como resultado de un error o maliciosamente de otro usuario en el servidor de terminal.

usar Del mismo modo ha iniciado la sesión de usuario ID de autenticación en el nombre del objeto IPC. En C ++ ver MSDN en GetTokenInformation uso para TokenStatistics la TokenInformationClass. Estoy seguro de que es un método .NET equivalente. Una vez más asegurar el objeto IPC.

Si debe utilizar sockets en un TS (yo personalmente elegiría otro método para la comunicación entre aplicaciones en un TS) a continuación, utilizar los números de puerto. Elija un número de puerto base y añadir el número de sesión para obtener el puerto utilizado para una sesión. Para asegurarse de que las aplicaciones correctas están comunicando utilizar un método de autenticación y / o el apretón de manos antes de la transferencia de datos. Teóricamente sesiones se pueden numerar hasta 65535 por lo que puede despegarse cuando se utiliza un número de puerto base del 2000 y dice sesión de su aplicación se ejecuta en la sesión 65500. Si realmente quería utilizar sockets entonces tal vez un servicio de broker ayudaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top