Я билась головой, пытаясь понять некоторые вещи. Итак, я ищу советы и материалы исследования (по ссылкам). Вот сценарий:
У нас есть библиотека (скажем, CommonLib), которая содержит ресурсы, необходимые для нескольких других приложений (например, AppA, AppB, AppC и т. Д.). Теперь, способ, которым это в настоящее время работает, является экземплярами AppA, проверяет, доступен ли определенный порт. Если это не так, то он запускает CommonLib («Эй, проснись») и служба запускается. Тогда AppA счастлив, и мы идем.
Итак, я провел много исследований по Remoting.Channels и пришел к выводу, что запускаю приложение, основанное на технологии, которая считается «устаревшей». Ну ... мне это не нравится. Честно говоря, WCF намного больше затрат, чем нам требуется, и не полностью реализован в Mono. Мы ориентируемся на мультиплатформенную совместимость (Windows, Mono, Linux), поэтому изучаем все варианты.
Идея удаленного взаимодействия возникла, во-первых, потому что мы хотели, чтобы CommonLib был гарантированно единичным экземпляром (насколько я понимаю, синглтон в значительной степени гарантированно является одиночным в пределах данного AppDomain - не стесняйтесь исправлять мне, если я ошибаюсь). Во всяком случае, я осознал силу удаленного взаимодействия и решил начать экспериментальную реализацию. Я был успешным в моем первоначальном использовании MarshalByRefObject. Но я обеспокоен дальнейшим внедрением этой устаревшей технологии.
Итак, со всем этим ... я рассматриваю, как я могу реализовать CommonLib (как хост-приложение) и, без удаленного взаимодействия, реализовать MarshalByRefObject через Stream, стандартный TCP-сокет или каким-либо другим способом. Я думаю, что вместо того, чтобы создавать AppA для запуска CommonLib, просто внедрите CommonLib в качестве базового приложения. Затем вы выбираете, какое приложение (на самом деле просто «размещенный» .dll) вы хотите использовать в CommonLib. Затем CommonLib загрузит этот .dll в платформу CommonLib вместе со всеми пользовательскими элементами управления, которые использует размещаемое приложение. Наряду с этой идеей, я бы отказался от требования (на данный момент), что CommonLib должен быть подлинным синглтоном.
Итак ... это деталь нашего сценария. Опять же, мой вопрос на самом деле состоит из 2 частей: (a) Какие технологии (ы) я должен исследовать, и (b) Нужно ли мне интересоваться унаследованным статусом технологии удаленного взаимодействия?
Любые другие советы, комментарии или вопросы приветствуются.
ОБНОВЛЕНИЕ 1: я начинаю с этого фрагмента . Это позволит мне загрузить файл (или скрипт) со списком установленных приложений (или плагинов). Я могу создать этот файл в формате XML или Binary. Когда новое приложение установлено, файл и путь могут быть добавлены. Хммм ... Мне не обязательно использовать MarshalByRefObject.