Вопрос по c#, .net, marshalling, wcf, appdomain – Связь между доменами приложений

4

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

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

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

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

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

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

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

Мои вопросы --

Это похоже на логический дизайн?Что еще более важно, существует ли уже класс посредника / передачи сообщений в WCF или какой-либо другой среде взаимодействия? это похоже на общую концепцию, и мне интересно, есть ли что-то подобное.
Я понимаю, что прошло 18 месяцев с момента публикации. Мне интересно, как ты разобрался. Мы столкнулись с аналогичными ограничениями, которые MEF сама по себе не может устранить, и что MAF, похоже, пошло по пути птицы додо. Ralph Shillington
Да, я слышал об этом. AFAIK он встроен в .NET, не уверен насчет поддержки более ранних версий ... Кроме того, я не уверен, как это соответствует этому конкретному сценарию. lysergic-acid
Мы установили службу WCF, которая действовала бы как подсистема PER посредника, для которой требовалось соединение со второго домена приложения (у нас было только 2 из них). Также мы убедились, что интерфейс, поддерживаемый этим посредником, очень прост (методы, которые принимают / возвращают примитивные типы, такие как строки и т. Д.). Приложение "plugin" создаст прокси WCF для этого объекта (используя именованные каналы). Таким образом, мы смогли общаться между обоими доменами приложений. lysergic-acid
Читая сутьPlugin я всегда сначала спрашиваю: «Вы когда-нибудь слышали оMEF Oliver

Ваш Ответ

1   ответ
5

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

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

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

В контексте WCF обмен данными по именованным каналам является механизмом, наиболее ориентированным на обмен данными на отдельной машине. Фактически, вы не можете обмениваться данными через конечную точку с помощью NetNamedPipeBinding с другого компьютера. Альтернативные привязки, доступные из коробки, как правило, более тяжелые с точки зрения протоколов (поэтому NetNamedPipedBinding, вероятно, будет более производительным), и как только вы начнете использовать их, вам нужно больше заботиться о безопасности (например, блокировка отключенные порты, если вы используете NetTcpBinding). remarkrm
Спасибо, я проверю это. Один вопрос - почему люди продвигают использование именованных каналов различных транспортных сред? каковы его преимущества? lysergic-acid
Ссылка на codesnippet-managed-wmp-plugin-wcf-ipc не работает, знаете ли вы о другом? Frank Schwieterman
@FrankSchwieterman это правильная ссылка:vikingco.de/codesnippet-managed-wmp-plugin-wcf-ipc.html jeyk
@FrankSchwieterman Это ссылка, которую вы искали?vikingco.de/codesnippet-managed-windows-media-plugins.html Ralph Shillington

Похожие вопросы