У меня был небольшой проект, в котором было и то, и другое. Используя IPC, он передал настройки клиенту, где клиент изменил настройки и отправил их обратно. Когда служба получила новые настройки, она сохранила их с помощью ConfigurationManager и соответствующим образом обновила себя. Мы приложили большие усилия, чтобы служба могла переконфигурироваться без перезапуска.
Обновить Чтобы выполнить просьбу Георгия о дополнительной информации:
Мы использовали Remoting, но вы могли бы и, вероятно, должны использовать WCF. Положительным побочным эффектом является то, что вы можете изменить привязку к маршрутизируемому IP-адресу и позволить удаленным пользователям настраивать службу, если хотите. Это добавляет соображения безопасности, но вы можете справиться с этим в WCF и удаленном взаимодействии по своему усмотрению.
Я считаю, что мы не могли просто отправлять ConfigurationElements
или разделы через службу, поэтому вместо этого мы просто создали простой класс настроек и передавали его туда и обратно. Со стороны сервиса мы попросили сервис перевести класс Settings в обновленный ConfigurationElement и сохранить конфигурацию с помощью ConfigurationManager
. У нас сработало нормально, но я вижу, что это большая проблема, если у вас много настраиваемых элементов или сложная схема конфигурации. Если это становится сложным, вы можете просто использовать свой собственный API конфигурации, чтобы иметь полный контроль над типами и жизненным циклом.
Наконец, вам нужно убедиться, что часть службы, которая выполняет фактическую работу, проверяет изменения конфигурации через регулярные промежутки времени, когда перенастройка безопасна, и что обработка, которая уже выполнялась при запуске конфигурации, не будет затронута изменениями. Простой способ сделать это — остановить обработку службы, когда она получит сигнал от клиента, и возобновить ее, когда клиент скажет, что это сделано.
person
moribvndvs
schedule
05.03.2010