В нашем приложении (системе управления документами) мы должны получать уведомления об изменениях экрана (или уведомлять другую программу об изменениях экрана), чтобы два приложения смотрели на одни и те же данные, одно из которых является приложением для выполнения заказов, другое просмотрщик документов исходного факса. Приложение для выполнения написано на vb6, а менеджер документов — на .net 3.5 (c#). Он работает на терминальном сервере, поэтому он также должен быть осведомлен о сеансе. Средство просмотра документов или приложение выполнения могут быть открыты первыми, и оба могут использоваться друг без друга. Что было бы лучшим методом IPC?
Лучший IPC для приложений VB6 и .net
Ответы (3)
Если вы хотите иметь возможность работать в Vista или Windows 7, лучшей формой IPC будет TCP (что очень легко делается из VB6 с управлением Winsock).
Преимущество этого заключается в том, что два приложения могут взаимодействовать, даже если они не работают от имени одного и того же пользователя, они могут взаимодействовать (вы не можете сделать это с помощью SendMessage или Named Pipes в Vista+). Единственное, что вам нужно помнить, это установить правило в брандмауэре, чтобы он не блокировался. Это можно сделать в установщике с помощью:
netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable
Ответ Криса, вероятно, все еще лучший выбор, но вам, вероятно, понадобится кладж, чтобы поддерживать здравомыслие с терминальным сервером.
В любом приложении, которое вы хотите использовать в качестве «серверного» приложения, вы можете открыть неиспользуемый порт и отобразить его для ввода в «клиентское» приложение. Возможно, даже с использованием переменных среды. В зависимости от ваших потребностей этот подход может быть неправильным.
Если у вас просто есть два приложения, одно из которых должно быть уведомлено об изменении другого (и не уведомлено о том, что на самом деле изменилось), вы, вероятно, могли бы сделать это, отправив и перехватив сообщения Windows.
Именованные каналы и почтовые ящики по-прежнему являются одними из лучших доступных вариантов, и они работают как между пользователями, так и между процессами. Конечно, в Vista+ есть проблемы с процессами, работающими на разных уровнях целостности, и безопасность применима и к более ранним ОС — так же, как и к безопасности файлов.
TCP всегда значительно медленнее на одной и той же машине, возможно, даже хуже, чем WM_COPYDATA для разных процессов.
Используя каналы или почтовые ящики, вы можете управлять службами терминалов, сделав идентификатор сеанса частью имени. TCP всегда будет оспаривать его ограниченное «пространство имен» номеров портов (представьте себе жесткий диск, на котором могут быть только файлы с именами от 0 до 65535 — и для каждого соединения требуется ДВА номера порта).