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