воскресенье, марта 27, 2005

Основы Framework.NET: работаем с настройками приложения

Microsoft предлагает несколько решений этой проблемы.

ASP.NET-приложения обычно только считывают свои настройки и не имеют интерфейса для их изменения1. Так же ASP.NET приложения, в отличии от Windows Forms, не должны иметь настройки для различных Windows-пользователей (так как они запускаются от имени одного специального пользователя). В этом случае хранить настройки можно в файле web.config в разделе <appSettings>, а считывать методом System.Configuration.AppSettingsReader.GetValue(). Так как при изменении файла web.config ASP.NET приложение перезапускается, то хранить в нем динамически изменяющиеся настройки не рекомендуется (тем более, что Microsoft не предоставила готовых методов для изменения значений в этом файле).

Динамически изменяемые настройки в ASP.NET приложении можно хранить в отдельном xml-файле или в базе данных2. Использование реестра для хранения настроек ASP.NET приложения считаю не целесообразным.

В случае с Windows Forms приложением, для хранений read-only настроек так же используется файл <exe_name>.config. Но отличается работа с изменяемыми настройками. Общие для всех пользователей (имеется в виду Windows пользователей) приложения настройки, можно хранить по прежнему в отдельном XML-файле, а вот настройки, специфические для пользователя, желательно хранить в реестре, в соответсвующей ветке. Так каждый пользователь сможет использовать свои личные настройки, а так же они будут защищены системой безопасности Windows.

Microsoft Enterprise Library: Configuration Application Block

При использовании CAB настройки могут храниться как в отдельных XML файлах, так и в базе данных и при этом мы получим очень гибкий механизм для работы с этими настройками. Так же CAB выполняет работу по кэшированию настроек и их синхронизации с самим хранилищем настроек. CAB не рекомендуется к использованию только для приложений где будет достаточно web.config файла (или <exe_name>.config).


1В данном случае речь идет именно об общих настройках приложения, например, строках подключения к базе данных. Речь не идет, например, о личных настройках пользователей самого приложения, так как их у ASP.NET приложения может быть очень много и для их хранения целесообразнее использовать базу данных.
2Framework.NET не предоставляет каких либо специальных классов для помощи в использовании отдельных XML-файлов или базы данных как хранилищь для настроек приложения. Но зато Microsoft предоставляет Configuration Application Block в составе Enterprise Library, который имеет нужные механизмы.