Работа с конфигурационными данными
Основны
Все приложения .NET Framework наследуют базовые параметры конфигурации и параметры по умолчанию от файла systemroot\Microsoft\.NET\Framework\номер_версии\CONFIG\Machine.config. Файл Machine.config содержит параметры конфигурации на стороне сервера. Некоторые из этих параметров не могут быть переопределены файлами конфигурации, находящимися ниже в иерархии.
Machine.config - Содержит настройки всего сервера. Настройки, находящиеся в файле Machine.config, наследуются всеми остальными файлами конфигурации .NET, включая файлы конфигурации IIS.
Клиентские приложения .NET (консольные приложения и приложения Windows) используют файл конфигурации имя_приложения.config для переопределения унаследованных параметров. Приложения ASP.NET для переопределения унаследованных параметров используют файлы конфигурации Web.config.
В корне иерархии конфигурации ASP.NET находится корневой файл Web.config, каталог размещения которого совпадает с размещением файла Machine.config. Корневой файл Web.config наследует все параметры от файла Machine.config. Корневой файл Web.config содержит параметры, применяемые ко всем приложениям ASP.NET, выполняющим определенную версию платформы .NET Framework. Поскольку все приложения ASP.NET наследуют параметры конфигурации по умолчанию от корневого файла Web.config, необходимо создать файл Web.config только для тех параметров, которые переопределяют параметры по умолчанию.
Web.config (корневой уровень) - Позволяет определять настройки для отдельных веб-узлов, веб-приложений или виртуальных и физических каталогов. Этот файл можно хранить в том же каталоге, что и код или содержимое.
Данный файл можно использовать для перезаписи настроек, которые наследуются от более высоких уровней иерархии конфигурации, а также для блокировки унаследованных настроек, чтобы они не могли быть заменены настройками конфигурации более низких уровней.
Web.config (уровень приложений) - Позволяет определять настройки для отдельных веб-узлов, веб-приложений или виртуальных и физических каталогов. Этот файл можно хранить в том же каталоге, что и код или содержимое.
Данный файл можно использовать для перезаписи настроек, которые наследуются от более высоких уровней иерархии конфигурации, а также для блокировки унаследованных настроек, чтобы они не могли быть заменены настройками конфигурации более низких уровней.
уровни расположения файла в иерархии конфигурации
Обработка конфигурационных файлов
При первом запуске веб-приложения исполняющая среда создает кэш действующих параметров веб-приложения, объединив параметры из разных конфигурационных файлов следующим образом:
- Сначала извлекаются параметры из файла Machine.config.
- В кэш добавляются параметры из корневого файла Web.config, переопределяющие ранее кэшированные параметры из файла Machine.config.
- Если в корневом каталоге веб-сайта есть файл Web.config, параметры из него заносятся в кэш, переопределяя ранее кэшированные одноименные параметры.
- Если веб-приложение имеет собственный файл Web.config, параметры из него также добавляются в кэш, переопределяя ранее кэшированные параметры. В итоге кэш заполняется параметрами, применяемыми к веб-сайту.
- Если веб-приложение имеет подкаталоги, в них также могут входить файлы Web.conifg, содержащие параметры, специфичные для файлов и папок отдельного подкаталога. Для определения действующих параметров папки сначала читаются параметры веб-сайта (шаги 1—4), затем в кэш добавляются параметры из файла Web.config, расположенного в этой папке, которые и определяют окончательные параметры.
Редактирование конфигурационных файлов
Так как файлы конфигурации являются файлами XML, их можно открывать и редактировать с помощью любого текстового или XML-редактора. Допустимо также использовать оснастку .NET Framework 2.0 Configuration для консоли Microsoft Management Console (MMC), предоставляющую графический интерфейс для изменения некоторых параметров конфигурации, нужных администраторам.
Кроме того, в Visual Studio 2005 имеется утилита Web Site Administration, позволяющая изменять многие параметры конфигурационных файлов. Чтобы запустить ее, выберите команду меню Website | ASP.NET Configuration.
Утилита Web Site Administration позволяет редактировать конфигурационные файлы следующих категорий:
- Security
Эти параметры помогают настраивать параметры безопасности веб-сайта. Сюда можно добавлять пользователей, роли и разрешения на доступ к веб-сайту.
- Application Configuration
Данная категория используется для изменения параметров приложения. Provider Configuration
Редактировать конфигурационные файлы можно и вручную, выбрав их в обозревателе решений (Solution Explorer)
Пример файла web.config, сформированного при создании нового веб - узла средствами Visual Studio:
<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/> <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> </sectionGroup> </sectionGroup> </sectionGroup> </configSections> <system.web> <pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </controls> </pages> <compilation debug="true"> <assemblies> <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </assemblies> </compilation> <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpModules> </system.web> <system.web.extensions> <scripting> <webServices> </webServices> </scripting> </system.web.extensions> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules> <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </modules> <handlers> <remove name="WebServiceHandlerFactory-Integrated"/> <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </handlers> </system.webServer> </configuration>
Параметры конфигурирования непосредственно ASP.NET находятся между дескрипторами <system.web>. Вы можете определять любые свои группы параметров конфигурирования (разделы), но обычно, разделов, предлагаемых системой ASP .NET, вполне достаточно.