Member 10796859 Ответов: 1

Мне нужна двунаправленная межпроцессная коммуникация?


Мне нужно двунаправленно взаимодействовать с несколькими EXE-приложениями, работающими на одном компьютере, с одним управляющим EXE-приложением на том же компьютере, который UDP-соединен с сервером по частной сети. В сети есть несколько компьютеров, на которых работают одни и те же приложения и которые взаимодействуют со своим управляющим приложением.
Оригинальное программное обеспечение было разработано в VB6 с использованием ActiveX COM для приложения управления. Каждое приложение на компьютере, нуждающееся в значениях, запрашивало их у управляющего приложения через COM-интерфейс, который затем передавал запрос на сервер через UDP. Затем запрошенное значение возвращается в управляющее приложение и обратно в запрашивающее клиентское приложение с помощью обратного вызова.
Любые идеи о том, как реплицировать эту функциональность в VB.NET буду очень признателен. Обратный вызов не требуется, если возможны другие схемы уведомления. Я бы хотел избежать каких-либо опросов.

Что я уже пробовал:

Я пробовал использовать COM-класс в исполняемом файле в Visual Studio 2008, и он отлично работает с одним подключенным приложением. Второе приложение, которое пытается войти в приложение управления, нуждается в новом экземпляре.

lmoelleb

Сколько вы можете заменить? Это похоже на то, что вы сделали бы с шиной сообщений, но есть и другие варианты (UDP, как уже используется, именованные каналы,...). Нет никаких проблем с созданием экземпляров COM-объектов из нескольких приложений одновременно, поэтому вы сталкиваетесь с чем-то специфичным для реализации, а не с общим ограничением COM в .NET. И мне просто нужно знать... почему VS2008? Он какой-то... старый...

Member 10796859

Я могу заменить все это. UDP используется только между сетевыми компьютерами через управляющие EXE-файлы. Мне просто нужно несколько приложений, все они подключаются к одному и тому же управляющему EXE через его COM-интерфейс. Я также реализовал схему сообщений для предоставления уведомлений приложениям, но предпочел бы двунаправленный канал связи между приложениями и управляющим EXE. VS2008 устарел, но у него также есть утилита преобразования для обновления VB6 до NET. Я использую его в качестве отправной точки, а затем мигрирую на VS2017/2019. Во всем решении есть много приложений, которые были преобразованы. Это последний раз.

1 Ответов

Рейтинг:
9

CPallini

У вас есть богатый набор альтернатив. Вы могли бы продолжать использовать COM, VB.NET прекрасно работает с ним. Вы можете использовать традиционный механизм IPC Windows (см. Межпроцессные коммуникации - приложения для Windows | Microsoft Docs[^] ). Вы могли бы использовать WCF см., например: Межпроцессная коммуникация с использованием WCF[^].


Member 10796859

В настоящее время я пытаюсь реализовать его с помощью COM, но я могу получить только одно приложение, чтобы использовать COM-интерфейс. Следующее приложение, которое пытается подключиться, хочет иметь свой собственный экземпляр. Мне кажется, что приложение хочет рассматривать его как DLL в своем собственном потоке. Может, у меня что-то не так? EXE-файл, предоставляющий интерфейс класса COM, должен быть единственным, работающим на компьютере, все приложения должны иметь доступ к одному и тому же интерфейсу COM.