Конфигурирование и настройка Microsoft ASP.NET

         

Чтение значений <appSettings>


Теперь давайте рассмотрим, как читать в ASP.NET значения из раздела <appSettings>. Обработчик раздела настроек для раздела <appSettings> делает эти параметры доступными при помощи коллекции имен значений <AppSettings>. Ниже приведен код на VB.NET и C#, который осуществляет доступ к значениям.

VB.NET

Dim sConnString as string ' Создаем строковое значение ' Читаем значение из коллекции sConnString = Configuration.AppSettings("connString") Dim oConn as SqlConnection ' Создаем наш объект соединения ' Используем строку для создания соединения oConn = new SqlConnection(sConnString)

C#

// Сначала читаем значение из коллекции AppSettings string sConnString = Configuration.AppSettings["connString"]; // Затем используем это значение для создания своего соединения SqlConnection oConn = new SqlConnection(sConnString);

Как вы можете видеть, получить доступ к значениям, добавленным в настроечный файл, очень просто – обратитесь к коллекции <AppSettings> и используйте имя, указанное вами в настроечном файле. Раздел <appSettings> облегчает добавление различных значений в настроечный файл. Он особенно ценен при работе со значением, используемым на различных страницах, так как не придется менять его для каждой страницы. Вместо этого вы измените его в настроечном файле – и каждая страница прочтет новое значение.



Добавление значения


При наличии строки, к которой требуется доступ из разных файлов приложений, следует добавить ее в раздел <appSettings> своего настроечного файла. Если это значение должно быть доступно всем приложениям вашего сервера, его также можно добавить в файл machine.config. Для добавления значения в коллекцию <appSettings> служит элемент <add> – задайте ключ, идентифицирующий значение в вашей коллекции, и значение, которое вы хотите сохранить. Для добавления элемента <add> используйте следующий синтаксис.

<appSettings> <add key="ourKey" value="ourValue" /> </appSettings>

Атрибуты элемента <add> перечислены в таблице 3.4.

Таблица 3.4. Атрибуты <add>

Имя атрибутаЗначения атрибута
Keystring. Это уникальный ключ, который вы используете для доступа к значению в коллекции. При добавлении ключа, уже имеющегося в коллекции, его значение будет переписано.
Valuestring. Это значение, которое вы будете хранить в настроечном файле.

Данный пример демонстрирует, как добавлять в настроечный файл строку базы данных.

<appSettings> <add key="ConnString" value="server=192.168.0.12;database=mydb; UID=myuser;Password=mypassword" /> </appSettings>

Здесь в коллекцию добавлена пара ключ/значение. Ключ называется ConnString, а значением пары является строка соединения с сервером. В конце этого раздела вы увидите, как получить доступ к этому значению при помощи ASP.NET.

Пример из практики. Возможность централизованного хранения таких значений, как строка подключения к базе данных, неоценима с точки зрения правильного проектирования приложений. Если это значение соединения должно меняться – либо при переходе на другой сервер, либо при простой смене имени пользователя – вы можете изменить строку в одном месте, и она обновится везде. Вам даже не потребуется перекомпилировать приложения, так как изменения вступят в силу при следующем доступе к соответствующим ресурсам.



Использование атрибута file


Элемент <appSettings> включает только один атрибут – атрибут file. Атрибут file используется для указания файла XML, который содержит элементы <add>, <remove> или <clear>. Этот метод очень похож на включение на стороне сервера, поскольку включает только параметры из файла XML. Для использования атрибута filе установите его значение в теге раздела <appSettings>.

<appSettings file="relative file path" />

В таблице 3.6 показано значение атрибута элемента <appSettings>.

Таблица 3.6. Атрибут <appSettings>

Имя атрибутаЗначения атрибута
Filestring. Относительный путь к файлу <appSettings>. Он является относительным по отношению к корневой папке приложения ASP.NET. Значения по-прежнему могут быть добавлены в раздел <appSettings>, но при возникновении конфликта значения, загруженные из файла, переопределят значения, добавленные в раздел.

Ниже приведен пример использования атрибута file.

<appSettings file="extrasettings.xml" />

Для использования атрибута file нужно создать файл XML, содержащий различные пары ключ/значение. Ниже приведен пример файла настроек в сочетании с атрибутом file.

<?xml version="1.0" encoding="utf-8" ?> <appSettings> <add key="MyKey" value="MyValue" /> <remove key="DatabasePassword" /> </appSettings>

Как вы можете видеть, это небольшой настроечный файл с одним единственным разделом настроек. Дочерние элементы этого раздела рассматриваются так, как если бы они были записаны в файле web.config или machine.config. Это очень эффективная методика, если требуется включить несколько значений в несколько приложений, поскольку можно создать подобный файл и сохранить его в месте, доступном для всех этих приложений.





Ключевые моменты


Для объявления разделов и групп разделов используется раздел <configSections>.Для удаления разделов или групп разделов, объявленных в предыдущем настроечном файле, используются элементы <remove> и <clear>.Для добавления в коллекцию значений, доступ к которым производится из различных файлов и приложений, используются раздел <appSettings> и элемент <add>.Для удаления одного или всех значений, объявленных в предыдущих настроечных файлах, используются элементы <remove> и <clear>.



Объявление группы разделов


Элемент <sectionGroup> объявляет группу разделов и объявления всех включенных в него разделов. Группа разделов – это логическое объединение нескольких разделов. В настроечных файлах каждое настраиваемое пространство имен будет иметь свою собственную группу разделов. Обычно файл machine.config содержит различные группы разделов, включая System.Web и System.Net. Если вы хотите включить для своего пространства имен несколько разделов настроек, то их нужно поместить в группу разделов. Ниже приведен синтаксис для объявления группы разделов.

<sectionGroup name="section group name" > <!-- Section declarations here --> </sectionGroup>

В таблице 3.2 приведены значения атрибутов элемента <sectionGroup>.

Таблица 3.2. Атрибуты <sectionGroup>

Имя атрибутаЗначения атрибута
Namestring. Имя группы разделов, обычно используется соглашение об именах Паскаля.

Следующий пример объявляет группу разделов System.Web и включает объявление раздела <httpRuntime>.

<sectionGroup name="System.Web"> <section name="httpRuntime" type= "System.Web.Configuration.HttpRuntimeConfigurationHandler, System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </sectionGroup>

Далее в настроечном файле вы включите этот раздел в <sectionGroup>.

<system.web> <httpRuntime executionTimeout="5000" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web>



Объявление раздела


Первым элементом в разделе <configSections> является <section>. Этот элемент используется для объявления раздела настроек, используемого далее в настроечном файле. Ниже приведен синтаксис элемента <section>.

<section name="SectionName" type="ConfigurationHandler" allowLocation="true | false" allowDefinition="true | false" />

Таблица 3.1 содержит список атрибутов элемента <section>.

Таблица 3.1. Табл. 3.1. Атрибуты <section>

Имя атрибутаЗначения атрибута
Namestring Имя, которое используется для ссылки на данный раздел в настроечном файле. Это любое значение, которое не конфликтует с именем другого раздела, но в большинстве случаев для имени раздела применяется соглашение об именах Паскаля.
Typestring Обработчик раздела настроек. Значение должно включать полную информацию о расположении класса в Global Assembly Cache.
AllowLocationtrue | false Определяет, может ли раздел использоваться в теге location. Значение true означает, что раздел может использоваться в теге location. Значение false означает, что раздел не может использоваться в теге location.
AllowDefinitionEverywhere Позволяет разделу использоваться в любом типе настроечного файла.
MachineOnly Позволяет разделу использоваться только в файле machine.config.
MachineToApplication Позволяет разделу использоваться как в файле machine.config, так и в настроечном файле приложения.

Вот пример того, как добавлять раздел в настроечный файл.

<section name="runtime" type="System.Configuration. IgnoreSectionHandler, System, Version=1.0.330.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false" />

Здесь вы видите объявление раздела с именем runtime. Имя раздела, равное значению runtime, указано с помощью атрибута name. Атрибут type указывает на обработчик раздела настроек, который будет интерпретировать раздел, – System.Configuration.IgnoreSectionHandler.



Работа с <appSettings>


Раздел <appSettings> позволяет хранить в настроечном файле символьные строки и получать эти значения из любого приложения. Эти строки, или значения, хранятся вместе с ключами, которые используются для получения строки в приложениях. Давайте посмотрим на различные элементы из раздела <appSettings>. В дальнейшем вы встретитесь с атрибутом file, который служит для указания файла XML, содержащего различные элементы <appSettings>.



Работа с <configSections>


Раздел <configSections> содержит все объявления обработчиков разделов настроек. Обработчики разделов настроек – это классы .NET, которые интерпретируют параметры и значения, содержащиеся в разделах настроек. В разделе <configSections> можно объявить новый раздел, удалить раздел и даже все объявления разделов.



Раздел настроек и параметры приложений


В лекции 1 вы уже видели раздел <configSections>, а здесь он описан более подробно. Также приведено описание раздела <appSettings>, используемого для добавления в настроечный файл дополнительных параметров и последующего доступа к этим параметрам из ваших приложений. Вы познакомитесь с разделами, параметрами и значениями для каждого раздела, узнаете, как использовать эти параметры на самых распространенных примерах. В данной лекции охвачены следующие вопросы.

<configSections>. Раздел содержит все объявления обработчиков разделов настроек (о них уже говорилось раньше), но теперь мы познакомимся с различными элементами, которые можно использовать в этом разделе.<appSettings>. Раздел позволяет централизованно хранить различные параметры, а также используется для хранения и возврата строк пары ключ/значение. Вы узнаете, как хранить эти значения и как использовать их в приложении.



Сброс всех разделов


Для удаления всех разделов и групп разделов используйте элемент <clear>. Он удаляет все разделы, объявленные до него, и все разделы, объявленные в предыдущих настроечных файлах. Ниже приведен пример использования элемента <clear> в настроечных файлах.

Файл machine.config

<configuration> <configSections> <section name="httpRuntime" type= "System.Web.Configuration.HttpRuntimeConfigurationHandler, System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </configSections> </configuration>

Файл web.config

<configuration> <configSections> <clear /> </configSections> </configuration>

Раздел <httpRuntime> из более раннего настроечного файла теперь не будет доступен.

Хотя раздел <configSections> не часто используется при работе с ASP.NET, очень важно понимать его функцию в архитектуре конфигурации. В части III данный раздел рассмотрен более подробно с точки зрения создания своих собственных разделов и обработчиков разделов.



Сброс всех значений


Элемент <clear> используется для полного сброса коллекции <appSettings>. Аналогично элементу <remove>, он служит для удаления различных пар ключ/значение, но при этом удаляет все пары. Ниже приведен пример элемента <clear>.

<appSettings> <clear/> </appSettings>

Добавление этого элемента в раздел <appSettings> полностью очищает его.



Удаление раздела


Для удаления из вашего настроечного файла разделов или групп разделов используется элемент <remove>. Ниже приведен его синтаксис.

<remove name="section or section group name" />

В таблице 3.3 приведены значения атрибута элемента <remove>.

Таблица 3.3. Атрибут <remove>

Имя атрибутаЗначения атрибута
Namestring. Имя раздела или группы разделов, которую нужно удалить.

Ниже показано, как нужно удалять объявление раздела, который наследуется из предыдущего настроечного файла.

<configSections> <remove name="httpRuntime" /> </configSections>

В примере удаляется раздел <httpRuntime> из группы <configSections>, что запретит настройку параметров httpRuntime в данном настроечном файле и всех настроечных файлах, наследуемых от него.



Удаление значения


Тег <remove> используется для удаления из коллекции пары ключ/значение. Вы указываете ключ пары, которую нужно удалить, и указанная пара в этой коллекции становится недоступной. Это полезно, если необходимо удалить параметр, который был добавлен в коллекцию на более высоком уровне. Например, пара ключ/значение, добавленная в файл machine.config, может быть изъята на уровне файла web.config с помощью следующей записи.

<appSettings> <remove key="ourKey" /> </appSettings>

В таблице 3.5 показаны значения атрибута элемента <remove>.

Таблица 3.5. Атрибуты <remove>

Имя атрибутаЗначения атрибута
Keystring. Ключ пары ключ/значение, которую необходимо удалить из коллекции.

Следующий пример показывает, как удалить строку, добавленную в предыдущем разделе.

<appSettings> <remove key="ConnString" /> </appSettings>

Данная пара ключ/значение будет недоступна этому приложению и любым другим приложениям, наследующим этот файл web.config.