Чтение значений <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.
Key | string. Это уникальный ключ, который вы используете для доступа к значению в коллекции. При добавлении ключа, уже имеющегося в коллекции, его значение будет переписано. |
Value | string. Это значение, которое вы будете хранить в настроечном файле. |
Данный пример демонстрирует, как добавлять в настроечный файл строку базы данных.
<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>.
File | string. Относительный путь к файлу <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>.
Name | string. Имя группы разделов, обычно используется соглашение об именах Паскаля. |
Следующий пример объявляет группу разделов 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>.
Name | string Имя, которое используется для ссылки на данный раздел в настроечном файле. Это любое значение, которое не конфликтует с именем другого раздела, но в большинстве случаев для имени раздела применяется соглашение об именах Паскаля. |
Type | string Обработчик раздела настроек. Значение должно включать полную информацию о расположении класса в Global Assembly Cache. |
AllowLocation | true | false Определяет, может ли раздел использоваться в теге location. Значение true означает, что раздел может использоваться в теге location. Значение false означает, что раздел не может использоваться в теге location. |
AllowDefinition | Everywhere Позволяет разделу использоваться в любом типе настроечного файла. |
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>.
Name | string. Имя раздела или группы разделов, которую нужно удалить. |
Ниже показано, как нужно удалять объявление раздела, который наследуется из предыдущего настроечного файла.
<configSections> <remove name="httpRuntime" /> </configSections>
В примере удаляется раздел <httpRuntime> из группы <configSections>, что запретит настройку параметров httpRuntime в данном настроечном файле и всех настроечных файлах, наследуемых от него.
Удаление значения
Тег <remove> используется для удаления из коллекции пары ключ/значение. Вы указываете ключ пары, которую нужно удалить, и указанная пара в этой коллекции становится недоступной. Это полезно, если необходимо удалить параметр, который был добавлен в коллекцию на более высоком уровне. Например, пара ключ/значение, добавленная в файл machine.config, может быть изъята на уровне файла web.config с помощью следующей записи.
<appSettings> <remove key="ourKey" /> </appSettings>
В таблице 3.5 показаны значения атрибута элемента <remove>.
Key | string. Ключ пары ключ/значение, которую необходимо удалить из коллекции. |
Следующий пример показывает, как удалить строку, добавленную в предыдущем разделе.
<appSettings> <remove key="ConnString" /> </appSettings>
Данная пара ключ/значение будет недоступна этому приложению и любым другим приложениям, наследующим этот файл web.config.