2016-01-28 3 views
0

Я ищу совет по наилучшему подходу для межпроцессного общения.Межпроцессное взаимодействие между 3 модулями

Решение состоит из 3 проектов.

  1. GUI: Это будет только отображать сообщения пользователя и получить пользовательский ввод

  2. службы Windows: Взаимодействует с пользовательским интерфейсом и работает 3-й модуль с повышенным полномочием

  3. Рабочий: Внутренняя DLL, которая будет выполнять текущую работу

Мне нужно, чтобы рабочий мог напрямую общаться с графическим интерфейсом для отправки и получения обновлений.

У меня есть два пути в виду, чтобы сделать это (будет рад видеть больше предложений):

  1. Используйте две названные трубы. Один для GUI <> Сервисная связь. А другой для графического интерфейса пользователя <> Рабочее сообщение

  2. Поднять мероприятие от Работника к Сервису. И использовать обратный вызов WCF от обслуживания до UI

Каким будет наилучший способ реализации связи?

ПРИМЕЧАНИЕ: Проблема здесь в графическом интерфейсе <> Связь с работником. Не UI <> Сервисная связь.

+0

Поиск 'windows ui service interprocess communication' и решить оттуда. Ваш вопрос довольно широк. См. Http://stackoverflow.com/help, как задать хорошие вопросы. –

+0

Возможный дубликат [Как связаться со службой Windows?] (Http://stackoverflow.com/questions/4451216/how-to-communicate-with-a-windows-service) –

+0

Проблема заключается не в связи между служба Windows и пользовательский интерфейс. Проблема заключается в том, как общаться между «рабочим», который отделен от службы Windows, и пользовательским интерфейсом. – mymo

ответ

0

1) WCF официально рекомендован для реализации межпроцессной связи (tcp или именованные каналы являются самыми быстрыми), он заменяет удаленный доступ (но всегда использует сериализацию/десериализацию). В расширенных сценариях связь может быть реализована с использованием

  • Файлы с отображением памяти;
  • Сервисный автобус. (Service Bus позволяет создавать слабосвязанные компоненты/связь. Google для nservicebus, rabbitmq, masstransit и т. Д.);
  • Что-то вроде веб-сокетов или SignalR (подумайте об этом, если у вас есть браузер/javascript client/GUI).

2) Если ваш рабочий является только библиотекой (сборка .net) - она ​​будет работать в рамках Сервисного процесса. В этом случае вам не нужно изобретать что-то, чтобы передавать данные/события от Рабочего в GUI, все коммуникации (дуплекс, я полагаю, с подпиской на события обслуживания) будут выполняться между графическим интерфейсом и сервисом (служба только делегирует некоторую работу Работнику через регулярные .net)

3) Иногда нам нужно что-то вроде диспетчера между службами, клиентом и сервером. Вы можете найти некоторую информацию here.

Смежные вопросы