У меня есть служба Windows, которая выполняет ряд периодических действий, и я хочу изменить настройки этой службы из приложения Windows Forms. Однако я не уверен, как лучше всего убедиться, что в службе есть самые последние пользовательские настройки (как часто запускать, какие папки использовать для вещей, что еще может указать пользователь). Пользователь может изменить настройки в любое время по своему желанию, и я бы хотел, чтобы служба узнала об этом практически сразу. Вот варианты, которые я взвешиваю:
- Форма и общая папка службы используют один и тот же объект «Параметры» из третьего общего проекта, а форма использует вызов WCF «UpdateSettings (newSettings)», чтобы сообщить службе о внесенных изменениях (или, при желании, вызов обновите каждую индивидуальную настройку, хотя это похоже на много разных вызовов). В настоящее время я использую WCF для базовых сообщений, но объект настроек может быть огромным, поскольку там много других вещей.
- Форма и служба используют общий файл конфигурации (XML или тот же объект настроек из №1, но сериализованный на диск). Форма просто записывает новую копию объекта после того, как он был изменен, и служба время от времени проверяет и забирает его, если он новый, обновляя свою копию настроек.
- То же, что и №2, но с базовым вызовом WCF, который сообщает службе, что нужно получить настройки. По сути, версия №2 «по запросу» вместо «опроса».
Я знаю, что лучше всего это субъективно, но меня интересуют любые очевидные аргументы за или против такого выбора. Поскольку мне придется сохранять свои настройки между запусками приложения (перезагрузками и т. Д.), Мне все равно придется сериализовать настройки на диск, поэтому я уже склоняюсь к № 2 или № 3. Мне понадобится место на диске, где я могу сохранить настройки, но, возможно, папка AppData будет работать нормально, хотя это позволит только администраторам изменять настройки, поскольку они единственные, у кого есть разрешение на запись в это место. (где его может прочитать каждый пользователь, включая учетную запись службы).
Спасибо за понимание!