Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Расширяемая Windows служба

#c_sharp #net #windows #служба


Хочу сделать расширяемую Windows службу, которая при своем запуске динамически загружает Dll.

Каждая Dll будет представлять собой определенное задание, которое должно выполняться
по расписанию.

Есть следующие вопросы:


Кому лучше дать ответственность за выполнение задания по расписанию самой службе
или объекту задания?
Правильно ли вынести конфигурацию заданий в отдельный XML файл, а в app.config хранить
адрес этого файла, а потом его передавать в конструкторы нужного задания, что бы объект
сам себя искал там и конфигурировал?
Можно ли будет на ходу заменять библиотеки расширений(например, на обновленную версию)
без отключения или мне не дадут заменить, используемые библиотеки?
Имеет ли смысл использовать MEF?

    


Ответы

Ответ 1



Кому лучше дать ответственность за выполнение задания по расписанию самой службе или объекту задания? Если все расширения являются заданиями, то имеет смысл вынести код планировщика выполнения заданий в основную службу, хотя-бы для того, чтобы не дублировать его в каждом расширении. Правильно ли вынести конфигурацию заданий в отдельный XML файл, а в app.config хранить адрес этого файла, а потом его передавать в конструкторы нужного задания, что бы объект сам себя искал там и конфигурировал? Я бы сделал хранение настроек отдельными файлами для каждого задания в фиксированной папке или БД и передавал параметры в конструктор. Но можно использовать и ваш вариант. В любом случае, расширение должно уметь обрабатывать ситуацию, когда оно добавлено, но конфигурация отсутствует. Можно ли будет на ходу заменять библиотеки расширений(например, на обновленную версию) без отключения или мне не дадут заменить, используемые библиотеки? Загруженная в CLR сборка может быть выгружена только вместе с доменом, в который загружена. Это решается загрузкой сборок-расширений в отдельный AppDomain, и выгрузкой этого изолированного домена, перед удалением DLL. Вообще про этот механизм лучше отдельный вопрос задать, там много нюансов, которые нужно учитывать. Имеет ли смысл использовать MEF? Да, этот механизм именно для таких случаев и предназначен

Комментариев нет:

Отправить комментарий