2009-05-12 10 views
3

В сеансе сервера терминалов некоторые стандартные технологии IPC могут работать не так, как в одной пользовательской среде, поскольку необходимые ресурсы не виртуализированы.Какие методы взаимодействия между процессами работают на сервере терминалов?

Например, порты TCP/IP не виртуализированы, поэтому приложения в разных сеансах, которые пытаются прослушивать один и тот же порт, вызовут конфликт портов.

Какая технология IPC будет работать в среде терминального сервера, где приложений, работающих в одном сеансе пользователя необходимо взаимодействовать?

  • Сообщения (WM_COPYDATA)?
  • Именованные трубы?
  • DDE?
  • Файлы с памятью?

ответ

4

Сообщения будут работать нормально. DDE тоже будет, поскольку он основан на сообщениях. Named pipes не будет, поскольку они предназначены для каждой системы, а не для сеанса. Вы можете также рассмотреть COM или OLE.

2

Все IPC могут использоваться в среде TS - вам просто нужно быть умным в наименовании объектов для достижения требуемого конечного результата. Использование сокетов сложнее, но это можно сделать. Я перечислил несколько методов ниже.

Для объектов IPC, которые могут быть названы (Pipe, Event, Mutex, Memory Mapped File и т. Д.), Включающий идентификатор сеанса в имя объекта, достигнет нумерации . Чтобы дополнительно заблокировать объект IPC, используйте атрибуты безопасности объекта, чтобы остановить доступ любого другого пользователя к объекту IPC. Это может произойти случайно в результате ошибки или злонамеренно от другого пользователя на терминальном сервере.

Аналогичным образом используйте идентификатор аутентификации пользователя в имени объекта IPC. В C++ см. MSDN по адресу GetTokenInformation, используйте TokenStatistics для TokenInformationClass. Я уверен, что существует эквивалентный метод .NET. Снова закрепите объект IPC.

Если вы должны использовать сокеты в TS (я лично выбрал бы другой способ связи между приложениями в TS), то используйте номера портов. Выберите номер базового порта и добавьте номер сеанса, чтобы получить порт, используемый для сеанса. Чтобы обеспечить передачу правильных приложений, используйте метод проверки подлинности и/или подтверждение связи перед передачей данных. Теоретически сеансы могут быть пронумерованы до 65535, поэтому вы можете отклеиваться, когда используете номер базового порта, скажем 2000, и сеанс, в течение которого ваше приложение запускается в сеансе 65500. Если вы действительно хотели использовать сокеты, возможно, брокерский сервис поможет.