Связь между доменами приложений - PullRequest
4 голосов
/ 23 января 2012

Мы создаем приложение (WinForms, .NET 3.5), которое загружает «подключаемые» библиотеки DLL во вторичный домен приложений. Вторичный домен приложений иногда должен взаимодействовать с первым (более конкретно, вызывать или получать данные из объектов, созданных в основном домене приложений).

Я прочитал большую часть материала о доменах приложений и связи между ними.

Пока что единственное простое решение, которое я видел, это наследование от MarshalByRefObject и передача TransparentProxy во 2-й домен приложений , вызывая методы на Прокси.

Этот метод имеет свои недостатки (не всегда возможно наследовать от MBRO, например, в случае типов каркаса или типов, которые уже наследуют от другого класса, статических полей / классов и т. Д.).

Поскольку текущие точки связи довольно постоянны (только 2-3 сценария, которые требуют связи), я подумал о создании простого Mediator класса со следующими свойствами:

  1. Будет создано в 1-м (основном) домене приложения.
  2. Будет функционировать только как «пропускающий сообщение» для «реальных» объектов, которые создаются в основном домене приложений.
  3. Будет наследоваться от MBRO, а ссылка на прокси будет отправлена ​​на 2-й домен приложений.

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

Мои вопросы -

  1. Это похоже на логический дизайн?
  2. Что еще более важно, существует ли уже класс посредника / передачи сообщений в WCF или какой-либо другой среде взаимодействия? это похоже на общую концепцию, и мне интересно, есть ли что-то подобное.

1 Ответ

5 голосов
/ 23 января 2012

Если вы по какой-то причине не хотите избегать WCF, я бы посоветовал взглянуть на него.В частности, вы можете использовать NetNamedPipeBinding, который обеспечивает связь на том же компьютере с использованием именованных каналов.Вы можете найти более подробную информацию здесь: http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx

Кроме того, вот довольно краткая запись в блоге , демонстрирующая его использование (от плагина WMP до стороннего приложения).

Исходя из вашего описания приложения, вы можете установить службу WCF в первом домене приложений, а затем вызвать эту службу со второго домена приложений.

...