Лучший IPC для приложений VB6 и .net

В нашем приложении (системе управления документами) мы должны получать уведомления об изменениях экрана (или уведомлять другую программу об изменениях экрана), чтобы два приложения смотрели на одни и те же данные, одно из которых является приложением для выполнения заказов, другое просмотрщик документов исходного факса. Приложение для выполнения написано на vb6, а менеджер документов — на .net 3.5 (c#). Он работает на терминальном сервере, поэтому он также должен быть осведомлен о сеансе. Средство просмотра документов или приложение выполнения могут быть открыты первыми, и оба могут использоваться друг без друга. Что было бы лучшим методом IPC?


person Community    schedule 19.03.2009    source источник


Ответы (3)


Если вы хотите иметь возможность работать в Vista или Windows 7, лучшей формой IPC будет TCP (что очень легко делается из VB6 с управлением Winsock).

Преимущество этого заключается в том, что два приложения могут взаимодействовать, даже если они не работают от имени одного и того же пользователя, они могут взаимодействовать (вы не можете сделать это с помощью SendMessage или Named Pipes в Vista+). Единственное, что вам нужно помнить, это установить правило в брандмауэре, чтобы он не блокировался. Это можно сделать в установщике с помощью:

netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable
person Kris Erickson    schedule 19.03.2009
comment
Проблема в том, что это еще и польза. Я использую много экземпляров каждого приложения на терминальном сервере, как в нескольких возможных сеансах для одного пользователя. Таким образом, я не могу использовать что-то, что не поддерживает сеанс. - person ; 20.03.2009

Ответ Криса, вероятно, все еще лучший выбор, но вам, вероятно, понадобится кладж, чтобы поддерживать здравомыслие с терминальным сервером.

В любом приложении, которое вы хотите использовать в качестве «серверного» приложения, вы можете открыть неиспользуемый порт и отобразить его для ввода в «клиентское» приложение. Возможно, даже с использованием переменных среды. В зависимости от ваших потребностей этот подход может быть неправильным.

Если у вас просто есть два приложения, одно из которых должно быть уведомлено об изменении другого (и не уведомлено о том, что на самом деле изменилось), вы, вероятно, могли бы сделать это, отправив и перехватив сообщения Windows.

person smbarbour    schedule 20.03.2009

Именованные каналы и почтовые ящики по-прежнему являются одними из лучших доступных вариантов, и они работают как между пользователями, так и между процессами. Конечно, в Vista+ есть проблемы с процессами, работающими на разных уровнях целостности, и безопасность применима и к более ранним ОС — так же, как и к безопасности файлов.

TCP всегда значительно медленнее на одной и той же машине, возможно, даже хуже, чем WM_COPYDATA для разных процессов.

Используя каналы или почтовые ящики, вы можете управлять службами терминалов, сделав идентификатор сеанса частью имени. TCP всегда будет оспаривать его ограниченное «пространство имен» номеров портов (представьте себе жесткий диск, на котором могут быть только файлы с именами от 0 до 65535 — и для каждого соединения требуется ДВА номера порта).

person Bob    schedule 26.03.2009