Общение с несколькими доменами приложений

У меня есть приложение, которое должно иметь несколько доменов приложений для изоляции потенциально небезопасных модулей, а также обеспечивать уровень изоляции для небезопасного для потоков кода. Каждый модуль реализует общий интерфейс, но также включает долговременные вызовы методов (минуты).

В далеком прошлом, когда я делал что-то подобное, я использовал MarshalByRefObject, но с тех пор, как прочитал, что WCF теперь является предпочтительным механизм взаимодействия через границу домена приложений.

Поскольку мне нужно несколько доменов приложений и каждый запрос может быть долгоживущим, я вижу несколько проблем:

  • Мне явно нужен только один поток для выполнения «рабочего» кода в заданное время (поэтому подход WCF по умолчанию для создания экземпляра нового класса хоста для каждого запроса является проблемой)
  • Как управлять списком доменов приложений / соответствующих конечных точек для выполнения вызовов (как сообщить каждому AD, какую конечную точку использовать / как он должен сообщать конечную точку, которую он выбирает наугад)

Изначально я планировал сделать вызовы в AppDomain асинхронными и иметь внутреннюю систему очередей, которая позволяла мне отслеживать / извлекать результаты, но в свете использования WCF и проблем с переопределением, достаточных для управления созданием экземпляра объекта хоста службы ( чтобы разрешить последующие вызовы одного и того же объекта), я начинаю задаваться вопросом, должен ли я блокировать все вызовы и позволять родительскому процессу обрабатывать все проблемы с потоками. конечно, тогда мне также нужно было бы убедиться, что у меня никогда не было больше одного ожидающего вызова для данного домена приложения, и выполнить постановку в очередь в родительском процессе.

Есть ли у кого-нибудь опыт работы с подобным сценарием / советом по хорошей архитектуре / ссылкой на достойную статью?


person Basic    schedule 21.08.2012    source источник
comment
Честно говоря, я не думаю, что WCF будет хорошим решением с жестко связанным контролем, который вам нужен для доменов приложений. Базовая архитектура, присущая WCF, слабо связана, ориентирована на службы и основана на удаленном вызове процедур. Я считаю, что WCF представляет неправильный уровень абстракции для вашего предполагаемого дизайна. Только мои 2 бита :)   -  person Sixto Saez    schedule 21.08.2012
comment
@SixtoSaez Спасибо. Я не согласен с вами, поскольку модель WCF не совсем подходит, отсюда и количество вопросов, которые у меня возникают. Я мог бы просто взять немного MarshalByRefObject и посмотреть, как получится. Между прочим, если вы хотите написать в качестве ответа, я приму, если у меня не будет лучшей альтернативы.   -  person Basic    schedule 21.08.2012


Ответы (1)


Платформа WCF отлично подходит для написания сервис-ориентированных приложений с использованием шаблона обмена сообщениями через механизм удаленного вызова процедур. NetNamedPipesBinding можно использовать для «управления» отдельными доменами приложений в одном и том же пространстве физической памяти, но этот уровень контроля не является тем, для чего предназначен WCF.

Может быть, что-то вроде это сообщение в блоге Джеффри Рихтера лучше подходит для того, что вы пытаетесь сделать.

person Sixto Saez    schedule 21.08.2012
comment
Спасибо - я так и подозревал. Статью стоит прочитать. - person Basic; 21.08.2012
comment
FWIW, метод, описанный в этой статье, на самом деле является чем-то Я уже пробовал, и это не сработало, так как код, который я вызываю, находится в неуправляемой dll (на всякий случай, если кто-то еще наткнется на это, и я, наконец, получу ответ на другой вопрос). Еще раз спасибо - person Basic; 21.08.2012