В первой
части описывается работа модели настроек
ASP.NET и дан обзор этой модели, который
поможет вам понять материал книги.
Лекция 1 подробно описывает структуру и
формат настроечных файлов, а также
функции модели настроек, относящиеся к
безопасности и обнаружению изменений.
Она включает также обзор редактирования
настроечного файла. В лекции 2 сделан
упор на архитектуре модели настроек и на
то, как настройки интерпретируются и
используются в Microsoft .NET Framework.
Введение в настройку Microsoft ASP.NET
Лекция
описывает структуру и формат настроечных
файлов, демонстрирует способы
редактирования настроечного файла, дает
обзор безопасности и обнаружения
изменений модели настроек. Особенности и
преимущества модели настроек ASP.NET
включают следующее.
-
Параметры конфигурации хранятся в
файлах XML с расширением .config.
Это позволяет редактировать файлы в
любом текстовом редакторе.
-
Настроечные файлы кэшируются в
Microsoft .NET Framework и не
блокируются, что позволяет вносить
изменения в действующие настроечные
файлы при минимальном влиянии на
пользователей.
-
Настройки могут быть созданы в
нескольких настроечных файлах и
распространены от сервера к
приложению и от родительского
приложения к дочернему приложению.
Это позволяет задавать параметры для
сервера, приложения, директории или
даже одного файла.
-
Пользовательские разделы и параметры
позволяют указать ваши собственные
настройки, сохраняемые в настроечных
файлах, доступ к которым имеют ваши
приложения.
-
Настроечные файлы защищены, и доступ
к ним через запросы HTTP
осуществляться не может.
Обзор
конфигурации ASP.NET
ASP.NET и
.NET Framework включают очень мощную и
адаптируемую модель настроек, основанную
на настроечных файлах в формате XML. Эти
файлы содержат большое разнообразие
конфигурационных параметров, которые
могут быть указаны с помощью правильного
XML. Когда в одном из настроечных файлов
делается изменение, при следующем
доступе к файлу или приложению
конфигурационные параметры
перекомпилируются и повторно кэшируются.
После компиляции настроечные файлы
кэшируются, при этом не производится их
блокировка, так что вы можете и дальше
изменять эти файлы. Так как файлы имеют
формат XML, для их редактирования
подойдет любой текстовый редактор.
Два
главных типа файлов, которые вы будете
использовать, называются
machine.config
и web.config.
Файл
machine.config содержит настройки
для всего сервера и базовые настройки,
используемые каждым веб-приложением.
Файл
machine.config расположен в
директории c:\%windir%\Microsoft.Net\
Framework\version\config. Замените слово
version на номер установленной у вас
версии .NET Framework.
Замечание.
%windir% является директорией
установки 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,
индивидуальном для каждого приложения.
Разбор
настроечных файлов 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>
</configuration>
В начале
файла
machine.config находится
объявление XML.
<?xml
version="1.0" encoding="UTF-8" ?>
Эта
строка указывает, что файл является
документом, совместимым с XML 1.0, и
использует кодировку UTF-8. Следующая
срока является началом конфигурационных
данных.
<configuration>
Она
представляет открывающий тег набора
тегов, который содержит все разделы
настроек и параметры. В конце файла
находится тег
</configuration>. Все разделы и
параметры располагаются между этими
двумя тегами.
Объявление обработчика раздела
конфигурации
Первым в
настроечных файлах идет раздел
<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.
Группы
разделов
Как
показано в разделе объявлений, различные
разделы настроек могут объединяться в
группы с целью группировки и логичной
организации параметров. Это значительно
облегчает чтение и понимание всего
разнообразия разделов параметров. Ниже
приведен пример такой группировки.
<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.
Разделы настроек
Разделы
настроек – это основа настроечных файлов;
в них задаются все настроечные параметры.
Эти разделы используют имя, объявленное
при объявлении обработчика раздела, и
могут содержать несколько настроек,
значений и подразделов. Вот раздел
настроек из примера файла
machine.config.
<httpRuntime
executionTimeout="5000"
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100" />
Этот
раздел объединяет несколько различных
параметров, таких как
executionTimeout
и
maxRequestLength, связанных со
средой выполнения HTTP. Данные параметры
обрабатываются одним и тем же
обработчиком настроек, указанным в
области объявлений обработчиков. Имя
раздела всегда представлено в "верблюжьей"
нотации.
Подразделы
Разделы
могут содержать подразделы. Подраздел –
это параметр, который допускает
использование нескольких значений.
Подразделы являются частью родительского
раздела и обрабатываются тем же
обработчиком настроек. Этот пример
раздела
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. Раздел может содержать
неограниченное количество подразделов.
Имена подразделов должны следовать "верблюжьей"
нотации.
Параметры
Параметры
конфигурации находятся либо в разделах,
либо в подразделах и включают имя
параметра, за которым следует знак
равенства и значение, заключенное в
кавычки, например:
<compilation
debug="false" />
Имя
раздела настроек –
compilation,
имя параметра –
debug, а значение этого параметра
устанавливается в логическое значение
False (ложь).
Имена
параметров почти всегда следуют "верблюжьей
нотации". Значения обычно используют
соглашение об именах Паскаля, но имеется
пара исключений. Слова
true (истина)
и false (ложь)
всегда пишутся строчными буквами.
Значение параметра также может быть
символьной строкой, такой как строка
подключения к базе данных, и в этом
случае оно не следует никакому стандарту
на использование регистра.
Применение
изменений в настроечных файлах
Когда
пользователь впервые осуществляет доступ
по URL, ASP.NET просматривает файл
machine.config
и все применимые к этой ситуации файлы
web.config
и определяет, какие настроечные
параметры нужно применить к этому URL.
Затем эта информация кэшируется, так что
при следующем запросе к этому URL она
будет доступна, и ее не нужно заново
считывать из настроечных файлов. Когда в
один из используемых настроечных файлов
вносится изменение, кэшированные
параметры удаляются, и при следующем
обращении к этому URL процесс
повторяется с самого начала.
Так как
приложения не должны держать эти файлы
открытыми в процессе выполнения, вы
можете свободно изменять их, не
беспокоясь об остановке приложения.
После внесения всех изменений можно
просто сохранить файл, и при следующем
доступе к соответствующей странице
настройки будут применены – практически
незаметно для пользователей, посещающих
ваш сайт.
Настроечные файлы не требуют компиляции,
что одновременно является как
достоинством, так и недостатком.
Положительно то, что можно редактировать
файлы в обычном текстовом редакторе, не
требуя никаких специальных приложений
или компилятора. А недостаток
заключается в том, что не существует
промежуточного шага между модификацией
файла и перекомпиляцией приложения с
новой конфигурацией. Если указано
неверное значение, приложение выдаст при
компиляции сообщение об ошибке, или,
если изменение внесено в файл
machine.config,
все приложения выдадут такое сообщение,
что сделает приложение недоступным для
пользователей, пока ошибка не будет
исправлена. По этой причине хорошей
идеей является тестирование изменений
настроек на сервере для разработки, и
только затем внесение изменений на
рабочем сервере.
Обзор
безопасности
К файлам
с расширением .config нельзя получить
доступ при помощи браузера – любая
попытка приведет к возникновению ошибки
HTTP 403 Aсcess Denied Error (доступ
запрещен). Такой же уровень безопасности
используется для файлов
.aspx.
Очевидно, что вы не захотите делать эти
файлы доступными для общественности, и
такой уровень безопасности гарантирует
отсутствие доступа. Поскольку посетители
не смогут получить эту информацию, можно
хранить в настроечных файлах строки
подключения к базе данных, пароли и
ключи лицензий и быть уверенным, что они
защищены.
Редактирование настроечных файлов
Давайте
рассмотрим, как редактировать
настроечный файл. Это довольно простая
процедура. Если вы уже редактировали
настроечные файлы, то можете пропустить
этот раздел.
-
Если у вас установлена 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.
|