Группы разделов
Как показано в разделе объявлений, различные разделы настроек могут объединяться в группы с целью группировки и логичной организации параметров. Это значительно облегчает чтение и понимание всего разнообразия разделов параметров. Ниже приведен пример такой группировки.
<system.web> <httpRuntime executionTimeout="5000" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> <compilation debug="false" explicit="true" defaultLanguage="vb" strict="false" batch="true" batchTimeout="15" maxBatchSize="1000" maxBatchGeneratedFileSize="3000" numRecompilesBeforeAppRestart="15"> </compilation> </system.web>
Различные разделы объединены внутри тегов, представляющих объявление имени группы разделов. В нашем примере разделы httpRuntime и compilation объединены в группу разделов system.web.
Объявление обработчика раздела конфигурации
Первым в настроечных файлах идет раздел <configSections>. Он содержит объявления обработчиков разделов настроек для последующих разделов настроек. Каждый раздел настроек связан с обработчиком, который будет обрабатывать параметры этого раздела. Каждое объявление связывает свой раздел настроек с обработчиком, который будет обрабатывать параметры этого раздела. Обработчик конфигурации – это класс, который реализует интерфейс IConfigurationSectionHandler и интерпретирует различные параметры и значения раздела настроек.
Дополнительная информация. Интерфейс – это вид шаблона .NET. Он включает методы, которые должен содержать реализующий его класс. В этом примере класс, реализующий IConfigurationSectionHandler, должен содержать метод Create().Давайте более внимательно посмотрим на одно из этих объявлений.
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <section name="httpRuntime" type= "System.Web.Configuration.HttpRuntimeConfigurationHandler, System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Запись name= setting указывает имя, которое будет использоваться при объявлении раздела в настроечном файле. В нашем примере это имя httpRuntime. Запись type = setting указывает обработчик, который будет обрабатывать данный раздел и интерпретировать его значения. В нашем примере обработчиком является класс System.Web.Configuration.HttpRuntimeConfigurationHandler. Запись type = value – это информация GAC, требуемая для нахождения правильного класса.
Дополнительная информация. GAC, или Global Assembly Cache (глобальный кэш сборок) – это метод, используемый .NET Framework для хранения ссылок на различные сборки .NET, которые должны быть доступны нескольким приложениям.Внутри <configSections> объявлены группы разделов. Вы можете видеть, что несколько объявлений объединены в следующую группу разделов.
<sectionGroup name="system.web"> <section name="httpRuntime" type= "System.Web.Configuration.HttpRuntimeConfigurationHandler, System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <section name="compilation" type= "System.Web.Configuration.CompilationConfigurationHandler, System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </sectionGroup>
<system.web> <httpRuntime executionTimeout="5000" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> <compilation debug="false" explicit="true" defaultLanguage="vb" strict="false" batch="true" batchTimeout="15" maxBatchSize="1000" maxBatchGeneratedFileSize="3000" numRecompilesBeforeAppRestart="15"> </compilation> </system.web>
<httpRuntime executionTimeout="5000" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
Это означает, что разделы httpRuntime и compilation должны располагаться в группе разделов system.web. Обработчики объявлений подробно описаны в лекции 2, а создание собственных обработчиков – в лекции 9.
Обзор безопасности
К файлам с расширением .config нельзя получить доступ при помощи браузера – любая попытка приведет к возникновению ошибки HTTP 403 Aсcess Denied Error (доступ запрещен). Такой же уровень безопасности используется для файлов .aspx. Очевидно, что вы не захотите делать эти файлы доступными для общественности, и такой уровень безопасности гарантирует отсутствие доступа. Поскольку посетители не смогут получить эту информацию, можно хранить в настроечных файлах строки подключения к базе данных, пароли и ключи лицензий и быть уверенным, что они защищены.
Обзор конфигурации ASP.NET
ASP.NET и .NET Framework включают очень мощную и адаптируемую модель настроек, основанную на настроечных файлах в формате XML. Эти файлы содержат большое разнообразие конфигурационных параметров, которые могут быть указаны с помощью правильного XML. Когда в одном из настроечных файлов делается изменение, при следующем доступе к файлу или приложению конфигурационные параметры перекомпилируются и повторно кэшируются. После компиляции настроечные файлы кэшируются, при этом не производится их блокировка, так что вы можете и дальше изменять эти файлы. Так как файлы имеют формат XML, для их редактирования подойдет любой текстовый редактор.
Два главных типа файлов, которые вы будете использовать, называются machine.config и web.config. Файл machine.config содержит настройки для всего сервера и базовые настройки, используемые каждым веб-приложением. Файл machine.config расположен в директории c:\%winndir%\Microsoft.Net\ Framework\version\config. Замените слово version на номер установленной у вас версии .NET Framework.
Замечание. %winndir% является директорией установки Windows; это может быть c:\winnt, c:\windows или еще какая-либо.Файл web.config содержит параметры, специфичные для приложения и всех дочерних приложений или директорий. Файл web.config для веб-приложения хранится в корневой директории этого приложения.
Параметры в файле приложения web.config могут переопределять параметры, содержащиеся в файле machine.config. Параметры конкретного файла web.config можно снова переопределить в дополнительном файле web.config дочернего приложения этого приложения. Например, если в файле machine.config сервера отключена трассировка, то это будет параметром по умолчанию для всех приложений ASP.NET, выполняющихся на этом сервере. Если вы включите трассировку в файле web.config для веб-приложения ASP.NET App1, то для App1 трассировка будет включена, а для всех остальных приложений она останется выключенной, так как параметр в файле web.config имеет приоритет над параметрами файла machine.config. Если добавляется дочернее приложение App1, то для этого дочернего приложения трассировка также будет включена, поскольку приложение сначала наследует параметры из файла machine.config, а затем – из файла web.config для App1.
Более подробно данный процесс описан в лекции 2, но сейчас нужно запомнить, что параметры уровня сервера хранятся в файле machine.config и могут быть переопределены параметрами уровня приложения, которые хранятся в файле web.config, индивидуальном для каждого приложения.
и включают имя параметра, за
Параметры конфигурации находятся либо в разделах, либо в подразделах и включают имя параметра, за которым следует знак равенства и значение, заключенное в кавычки, например:
<compilation debug="false" />
Имя раздела настроек – compilation, имя параметра – debug, а значение этого параметра устанавливается в логическое значение False (ложь).
Имена параметров почти всегда следуют "верблюжьей нотации". Значения обычно используют соглашение об именах Паскаля, но имеется пара исключений. Слова true (истина) и false (ложь) всегда пишутся строчными буквами. Значение параметра также может быть символьной строкой, такой как строка подключения к базе данных, и в этом случае оно не следует никакому стандарту на использование регистра.
Подразделы
Разделы могут содержать подразделы. Подраздел – это параметр, который допускает использование нескольких значений. Подразделы являются частью родительского раздела и обрабатываются тем же обработчиком настроек. Этот пример раздела compilation содержит несколько различных подразделов.
<compilation debug="false" explicit="true" defaultLanguage="vb" strict="false" batch="true" batchTimeout="15" maxBatchSize="1000" maxBatchGeneratedFileSize="3000" numRecompilesBeforeAppRestart="15"> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" /> <compiler language="vb;vbs;visualbasic;vbscript" extension= ".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <compiler language="js;jscript;javascript" extension=".js" type="Microsoft.JScript.JScriptCodeProvider, Microsoft.JScript, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </compilers> </compilation>
<compilation debug="false" />
Именем раздела является compilation, он содержит подраздел compilers с несколькими подразделами compiler. Раздел может содержать неограниченное количество подразделов. Имена подразделов должны следовать "верблюжьей" нотации.
Применение изменений в настроечных файлах
Когда пользователь впервые осуществляет доступ по URL, ASP.NET просматривает файл machine.config и все применимые к этой ситуации файлы web.config и определяет, какие настроечные параметры нужно применить к этому URL. Затем эта информация кэшируется, так что при следующем запросе к этому URL она будет доступна, и ее не нужно заново считывать из настроечных файлов. Когда в один из используемых настроечных файлов вносится изменение, кэшированные параметры удаляются, и при следующем обращении к этому URL процесс повторяется с самого начала.
Так как приложения не должны держать эти файлы открытыми в процессе выполнения, вы можете свободно изменять их, не беспокоясь об остановке приложения. После внесения всех изменений можно просто сохранить файл, и при следующем доступе к соответствующей странице настройки будут применены – практически незаметно для пользователей, посещающих ваш сайт.
Настроечные файлы не требуют компиляции, что одновременно является как достоинством, так и недостатком. Положительно то, что можно редактировать файлы в обычном текстовом редакторе, не требуя никаких специальных приложений или компилятора. А недостаток заключается в том, что не существует промежуточного шага между модификацией файла и перекомпиляцией приложения с новой конфигурацией. Если указано неверное значение, приложение выдаст при компиляции сообщение об ошибке, или, если изменение внесено в файл machine.config, все приложения выдадут такое сообщение, что сделает приложение недоступным для пользователей, пока ошибка не будет исправлена. По этой причине хорошей идеей является тестирование изменений настроек на сервере для разработки, и только затем внесение изменений на рабочем сервере.
Разбор настроечных файлов ASP.NET
Файлы machine.config и web.config играют различные роли в архитектуре конфигурации, но формат и доступные параметры этих файлов практически одинаковы. Эти файлы основаны на XML, поэтому существует несколько правил XML, которые можно к ним применить.
XML чувствителен к регистру символов, и эти файлы также чувствительны к регистру.Наборы тегов должны иметь начальный и завершающий теги. Например, <configuration> должен иметь закрывающий </configuration> или закрываться сам <configuration />.Теги могут иметь несколько атрибутов и значений, и значения должны находиться внутри скобок.
Поскольку файлы чувствительны к регистру, важно знать два соглашения, используемых при создании настроечных файлов.
"Верблюжья" нотация. Каждое слово состоит из строчных букв, за исключением первых букв добавленных слов. Например, appSettings, maxRequestLength, userName.Нотация в стиле Паскаля. Каждое слово начинается с заглавной буквы, включая первое и все добавленные слова, например PublicKeyToken, RemoteOnly, AutoGenerate.
Ниже приведен фрагмент файла machine.config, показывающий различные разделы и общую структуру.
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <configSections> <sectionGroup name="system.web"> <section name="httpRuntime" type ="System.Web.Configuration.HttpRuntimeConfigurationHandler, System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <section name="compilation" type= "System.Web.Configuration.CompilationConfigurationHandler, System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </sectionGroup> </configSections> <system.web> <httpRuntime executionTimeout="5000" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> <compilation debug="false" explicit="true" defaultLanguage="vb" strict="false" batch="true" batchTimeout="15" maxBatchSize="1000" maxBatchGeneratedFileSize="3000" numRecompilesBeforeAppRestart="15"> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" /> <compiler language="vb;vbs;visualbasic;vbscript" extension= ".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <compiler language="js;jscript;javascript" extension=".js" type="Microsoft.JScript.JScriptCodeProvider, Microsoft.JScript, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </compilers> </compilation> </system.web>
В начале файла machine.config находится объявление XML.
<?xml version="1.0" encoding="UTF-8" ?>
Эта строка указывает, что файл является документом, совместимым с XML 1.0, и использует кодировку UTF-8. Следующая срока является началом конфигурационных данных.
<configuration>
Она представляет открывающий тег набора тегов, который содержит все разделы настроек и параметры. В конце файла находится тег </configuration>. Все разделы и параметры располагаются между этими двумя тегами.
Разделы настроек
Разделы настроек – это основа настроечных файлов; в них задаются все настроечные параметры. Эти разделы используют имя, объявленное при объявлении обработчика раздела, и могут содержать несколько настроек, значений и подразделов. Вот раздел настроек из примера файла machine.config.
<httpRuntime executionTimeout="5000" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
Этот раздел объединяет несколько различных параметров, таких как executionTimeout и maxRequestLength, связанных со средой выполнения HTTP. Данные параметры обрабатываются одним и тем же обработчиком настроек, указанным в области объявлений обработчиков. Имя раздела всегда представлено в "верблюжьей" нотации.
Редактирование настроечных файлов
Давайте рассмотрим, как редактировать настроечный файл. Это довольно простая процедура. Если вы уже редактировали настроечные файлы, то можете пропустить этот раздел.
Если у вас установлена Windows 2000, перейдите в папку C:\winnt, а если вы используете Windows XP – в папку C:\Windows.Откройте директорию Microsoft .NET.Откройте директорию Framework.Откройте директорию, имя которой совпадает с номером версии Framework, установленной на вашей машине, например "v1.1.4322".Откройте директорию CONFIG, в которой находятся и доступны для редактирования различные файлы .config.Сделайте щелчок правой кнопкой мыши на файле machine.config, в контекстном меню щелкните на Open With (Открыть с помощью) и в списке приложений щелкните на Notepad (Блокнот). Как показано на рис. 1.1, появится текст XML настроечного файла.
Рис. 1.1. Файл machine.config, открытый в Блокноте
Данные файлы являются файлами XML, поэтому можно вносить изменения прямо в Блокноте. В нашем примере вы должны включить трассировку для всех приложений, выполняющихся на сервере. Найдите раздел настроек trace (см. рис. 1.2).
Рис. 1.2. Выделено значение, которое нужно изменить для включения трассировки
В разделе настроек trace измените значение параметра enabled = со значения false на значение true. Это приведет к включению трассировки для всех приложений при условии, что web.config данных приложений не переопределяет этот параметр. Теперь следует сохранить настроечный файл. Изменения этого файла обнаружатся, когда пользователь в следующий раз обратится к соответствующему URL – параметры будут перекомпилированы и заново помещены в кэш.
Предостережение. Помните, что при редактировании отсутствует уровень для обнаружения и перехвата ошибок. Если вы установили значение truth вместо true, все приложения выдадут сообщение об ошибке. Когда обработчик настроек сталкивается с проблемой, он генерирует ошибку конфигурации, которая отображается у пользователей. В процессе редактирования вы должны быть сверхвнимательны и, если возможно, перед внесением изменений в рабочий сервер, примените изменения на тестовом сервере или сервере разработки.Настройка IIS. Что такое IIS? Internet Information Services? Я думал, мы покончили с изменением параметров и настройкой приложений в IIS.Хотя большинство параметров для приложений ASP.NET задаются в файлах .config, для некоторых изменений конфигурации вы по-прежнему должны использовать инструмент администрирования Internet Information Services (IIS). При инициализации пользователем веб-запроса последний сначала обрабатывается IIS. Если это запрос ASP.NET, то он далее передается для обработки в среду выполнения ASP.NET. Из-за этого некоторые настройки клиентcкой части должны по-прежнему задаваться в IIS, чтобы обеспечить правильную маршрутизацию запросов.
Для внесения следующих изменений вам потребуется инструмент администрирования IIS.
Создание и удаление приложений.Установка и изменение параметров безопасности приложений.Изменение расширений файлов, обрабатываемых ASP.NET.
При работе с Windows Server 2003 ASP.NET обрабатывает настроечные параметры, которые заданы в IIS, а не в настроечных файлах. Как сделать соответствующие изменения, описывается в лекции 8.
Введение в настройку Microsoft ASP.NET
Лекция описывает структуру и формат настроечных файлов, демонстрирует способы редактирования настроечного файла, дает обзор безопасности и обнаружения изменений модели настроек. Особенности и преимущества модели настроек ASP.NET включают следующее.
Параметры конфигурации хранятся в файлах XML с расширением .config. Это позволяет редактировать файлы в любом текстовом редакторе.Настроечные файлы кэшируются в Microsoft .NET Framework и не блокируются, что позволяет вносить изменения в действующие настроечные файлы при минимальном влиянии на пользователей.Настройки могут быть созданы в нескольких настроечных файлах и распространены от сервера к приложению и от родительского приложения к дочернему приложению. Это позволяет задавать параметры для сервера, приложения, директории или даже одного файла.Пользовательские разделы и параметры позволяют указать ваши собственные настройки, сохраняемые в настроечных файлах, доступ к которым имеют ваши приложения.Настроечные файлы защищены, и доступ к ним через запросы HTTP осуществляться не может.