Конфигурация ASP.NET

190

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

В качестве примера мы создали новый проект под названием ConfigFiles, используя шаблон ASP.NET Empty Web Application (Пустое веб-приложение ASP.NET) в Visual Studio. В проект мы добавили веб-форму по имени Default.aspx, которая будет применяться для отображения конфигурационной информации. Контент этой веб-формы представлен в примере ниже:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
    Inherits="ConfigFiles.Default" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title></title>
</head>
<body>
    <asp:Repeater ID="Repeater1" runat="server" SelectMethod="GetConfig" ItemType="System.String">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
        <ItemTemplate>
            <li><%# Item %></li>
        </ItemTemplate>
    </asp:Repeater>
</body>
</html>

Внутри этой веб-формы используется элемент управления Repeater для генерации элементов <li> из элементов данных, возвращаемых методом GetConfig() класса отделенного кода. Первоначально этот метод реализован в виде заглушки, как показано в примере ниже, но мы будем применять его для демонстрации различных конфигурационных средств по мере продвижения.

using System.Web.Configuration;
using System.Collections.Generic;

namespace ConfigFiles
{
    public partial class Default : System.Web.UI.Page
    {
        public IEnumerable<string> GetConfig()
        {
            yield return "Простая заглушка";
        }
    }
}

Иерархия конфигурации

Мы начнем с объяснения, как среда ASP.NET обрабатывает конфигурационные параметры для приложения. В большинстве случаев мы применяем конфигурационные параметры в файле Web.config, расположенном в корневой папке приложения, но это только одна часть иерархии конфигурационных файлов, которые ASP.NET объединяет для получения конфигурационной информации.

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

Иерархия конфигурационных файлов ASP.NET
Область действия Имя Описание
Глобальная Machine.config

Это файл верхнего уровня в иерархии, в котором определены разделы конфигурации, используемые в примерах, такие как system.web. Изменения в этом файле влияют на каждое приложение ASP.NET, выполняющееся на сервере. (Местоположение этого файла указано ниже.)

Глобальная ApplicationHost.config

В данном файле определены разделы конфигурации и стандартные значения для IIS или IIS Express. Это второй уровень иерархии, который применяется для определения разделов, специфичных для сервера приложений, таких как system.webServer. (Местоположение этого файла указано ниже.)

Глобальная Web.config

Это глобальная версия файла Web.config. Он расположен в той же папке, что и файл Machine.config. В данном файле предоставляются стандартные значения для конфигурационных элементов ASP.NET, и он находится на втором уровне иерархии. Изменения в этом файле переопределяют параметры в Machine.config

Сайт Web.config

Сайт ASP.NET - это иерархия папок IIS, которая может содержать множество приложений. Файл Web.config в корневой папке сайта устанавливает стандартную конфигурацию для всех приложений в рамках сайта. Этот файл находится на третьем уровне иерархии и применяется для переопределения параметров в глобальном файле Web.config

Приложение Web.config

Это файл Web.config в корневой папке приложения. Данный файл чаще всего используется разработчиками для целей конфигурирования, и он переопределяет значения, указанные в файле Web.config уровня сайта

Папка Элементы location

Элемент location в файле Web.config уровня приложения позволяет устанавливать конфигурационные параметры для папки внутри приложения, указанной в атрибуте path

Папка Web.config

Это файл Web.config, добавляемый в папку внутри приложения. Он дает такой же эффект, как и атрибут location в файле Web.config уровня приложения

Мы должны заботиться о порядке файлов в иерархии из-за способа, которым ASP.NET объединяет эти файлы с целью создания единого набора конфигурационных элементов, предназначенного для применения к приложению.

Среда ASP.NET начинает с файла Machine.config, находящегося в самом верху иерархии - это предоставляет начальную объединенную конфигурацию. Затем ASP.NET перемещается на второй уровень иерархии и обрабатывает файл ApplicationHost.config и глобальный файл Web.config. В объединенную конфигурацию добавляются новые элементы, а элементы, которые уже существуют, используются для изменения ранее определенных параметров.

Этот процесс продолжается по иерархии вплоть до достижения файла Web.config уровня приложения, а встречающиеся элементы применяются для расширения объединенной конфигурации или замены существующих значений параметров. Наконец, обрабатываются элементы location и файлы Web.config уровня папок, в результате чего создаются конфигурации, специфичные для частей приложения.

Мы заметили, что по мере расширения использования облачных служб и совершенствования платформ хостинга сайты ASP.NET применяются все реже и реже. Мы рекомендуем больше не пользоваться сайтами и устанавливать приложения изолированно друг от друга.

В конечном итоге получается согласованное представление конфигурации приложения с дополнениями, которые применяются к отдельным папкам. Чтобы упростить понимание способа объединения иерархии, мы проиллюстрировали отношения между различными файлами на рисунке ниже:

Иерархия конфигурационной информации ASP.NET

Если любой из файлов отсутствует, среда ASP.NET переходит на следующий уровень иерархии. (Как уже упоминалось, в глобальных файлах определена структура, которую файлы, расположенные ниже в иерархии, используют для определения конфигурационных значений.)

Причина, по которой большинство разработчиков имеют дело с файлом Web.config уровня приложения, связана с недоступностью файлов из более высоких уровней иерархии, что почти всегда характерно для платформ хостинга и облачных платформ, а также часто происходит в случае применения серверов IIS в закрытых дата-центрах.

Во время разработки иногда необходимо изменять глобальные конфигурационные файлы для воссоздания параметров, с которыми придется работать в производственной среде. Причина в том, что не все конфигурационные параметры могут быть определены в файле Web.config уровня приложения. Файл Machine,.config и глобальный файл Web.config расположены в следующей папке:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config

Указанный путь может несколько отличаться, если вы пользуетесь более новой версией платформы .NET или установили операционную систему Windows в нестандартном местоположении. Файл ApplicationHost.config, применяемый IIS Express, можно найти в такой папке (здесь <пользователь> понадобится заменить именем текущего пользователя):

C:\Users\<пользователь>\Documents\IISExpress\config

Никаких специальных примеров для демонстрации иерархии конфигурации в этом разделе не предусмотрено, но мы будем возвращаться к данной теме в последующих статьях, потому что она лежит в основе многих поведенческих аспектов приложения ASP.NET.

Лучший чат для C# программистов