Лучший IPC для приложений VB6 и .net - PullRequest
1 голос
/ 19 марта 2009

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

Ответы [ 3 ]

2 голосов
/ 19 марта 2009

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

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

netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable
1 голос
/ 26 марта 2009

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

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

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

1 голос
/ 20 марта 2009

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

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

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

...