Remoting + Reflection = ?тонкий клиент?
В идеале ситуация следующая:
1) Сервер и клиент знают о наличии интерфейса, но ничего не знают о типах классов в плагинах (классы - наследники интерфейса).
2) Сервер в run-time подгружает все типы из плагинов, которые являются наследниками интерфейса.
3) Информация о GUI подгружаемого класса содержится в нем самом (сервер о GUI ничего не знает).
4) Клиент получает через интерфейс объект подгруженного на сервере класса через remoting (server-activated object).
5) Клиенту необходимо отобразить GUI класса.
Проблема:
Контролы не передаются через AppDomain из-за Security Restrictions.
Вопрос:
Как можно реализовать данный подход?
Цитата: koltaviy
Как можно реализовать данный подход?
Сбросить гуи на клиента и не мучать этим сервер. Клиент собственно для этого и предназначен.
Контролы не просто нельзя передать через ремотинг - возникает проблема с ObjRef, который не относится ни к какому каналу.
На мой взгляд, наилучший вариант - разделить функционал подключаемых модулей (плагинов) на серверный (логика) и клиентский (гуи).
Понятно, что в общем случае клиент берет на себя задачу по отображению GUI.
Но тут ситуация-то другая:
1) Единожды устанавливаются клиенты на компы.
2) Единожды устанавливается сервер.
3) При необходимости разрабатываются модули и "заливаются" на сервер. На этом манипуляции заканчиваются.
а могло бы быть..: 4) Каждый новый модуль "заливается" на каждый клиент.. (именно этого хочется избежать)..
Цитата: koltaviy
3) При необходимости разрабатываются модули и "заливаются" на сервер. На этом манипуляции заканчиваются.
а могло бы быть..: 4) Каждый новый модуль "заливается" на каждый клиент.. (именно этого хочется избежать)..
а могло бы быть..: 4) Каждый новый модуль "заливается" на каждый клиент.. (именно этого хочется избежать)..
Ну, дык клиент подключается, интересуется о новых модулях и тягает их с серва при необходимости. :)
По идее в качестве тонкого нужно использовать Web-browser, только вот по задаче нельзя. :(
Цитата:
Ну так и приходится делать, только криво это как-то.
Отчего же криво? Обычная система обновлений клиента, так делают все. Как вариант, можно динамически компилировать классы на клиенте, но мне этот вариант нравится меньше.