Сценарии конфигурации ASP.NET

Visual Studio 2010

Обновлен: Ноябрь 2007

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

Так, например, веб-узел может иметь приведенную ниже физическую структуру, в которой корневой каталог приложения Application Root является виртуальным каталогом приложения.

dtbwsx8s.folders2(ru-ru,VS.100).gif

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

dtbwsx8s.alert_note(ru-ru,VS.100).gifПримечание.

Обработчик пользовательской секции может реализовать и другую схему наследования.

Пусть в каталоге SubDir1 имеется файл Web.config, а в корневом каталоге приложения Application Root или каталоге SubDir2 его нет. В этом случае ASP.NET использует три файла конфигурации, чтобы вычислить параметры конфигурации для каталога SubDir1. Файл конфигурации верхнего уровня находится в каталоге «%systemroot%\Microsoft .NET \Framework\НомерВерсии\CONFIG». Этот файл, с именем Machine.config, находится на уровне компьютера. Все приложения .NET Framework, работающие под управлением платформы .NET Framework указанной версии (НомерВерсии), наследуют параметры из этого файла. Следующий файл конфигурации верхнего уровня – это корневой файл Web.config, который находится в том же месте. Все приложения ASP.NET, работающие под управлением платформы .NET Framework указанной версии, наследуют его параметры. Третий файл конфигурации — это файл Web.config, расположенный в каталоге SubDir1.

Предположим, что файл Web.config в каталоге SubDir1 содержит элемент anonymousIdentification с атрибутом enabled, имеющим значение true. Значением по умолчанию для атрибута enabled является false. Это значение по умолчанию является внутренним, и оно не задано в каком-либо из корневых файлов конфигурации. Поскольку в корневом каталоге приложения Application Root или в каталоге SubDir2 нет файла конфигурации, который изменяет элемент anonymousIdentification, анонимные пользователи не имеют доступа к ресурсам ASP.NET в этих каталогах. Тем не менее, анонимные пользователи имеют доступ к ресурсам ASP.NET в каталоге SubDir1.

dtbwsx8s.alert_security(ru-ru,VS.100).gifПримечание о безопасности.

Система конфигурации ASP.NET применяется только к ресурсам ASP.NET, которые зарегистрированы как ресурсы, обрабатываемые ASP.NET, с использованием Aspnet_isapi.dll. Система конфигурации по умолчанию не осуществляет авторизацию ресурсов, не обрабатываемых ASP.NET. Так, например, всем пользователям доступны файлы ASP, HTML, TXT, GIF, и JPEG. В предыдущем примере, при разрешенном просмотре каталогов и при отсутствии других ограничений, все пользователи могут просматривать файлы, не обрабатываемые ASP.NET и находящиеся в корневом каталоге приложения, а также в каталогах SubDir1 и SubDir2. Дополнительные сведения о безопасности ASP.NET см. в разделе Безопасность веб-приложений ASP.NET.

Следующий веб-узел имеет структуру, в которой виртуальный каталог приложения соответствует корневому каталогу (MyAppRootDir).

MyAppRootDir
    SubDir1
        SubDir1A
    SubDir2

За исключением условий, описанных в подразделе «Ограничения в наследовании ASP.NET» раздела Иерархия и наследование файла конфигурации ASP.NET, параметр конфигурации в любом каталоге переопределяет параметры, записанные в родительских каталогах. Например, можно настроить параметры приложения таким образом, чтобы предоставить доступ к ресурсам ASP.NET в каталогах MyAppRootDir и SubDir2 всем пользователям, а в каталогах SubDir1 и SubDir1A — только выбранным пользователям, выполнив следующие шаги:

  1. Оставьте MyAppRootDir без изменений. Ресурсы ASP.NET в каталоге MyAppRootDir наследуют параметры, заданные по умолчанию, из файла Machine.config, один из которых допускает анонимный доступ. На этом этапе каталог MyAppRootDir и три его подкаталога наследуют этот параметр безопасности.

  2. Поместите файл Web.config в каталог SubDir1 с установленной проверкой подлинности, позволяющей только выбранным пользователям получать доступ к каталогу SubDir1. Это переопределяет анонимный доступ, разрешенный параметром в файле Machine.config и наследуется сверху вниз каталогом SubDir1A. Каталог SubDir2, который находится на том же уровне, что и каталог SubDir1, не наследует параметр проверки подлинности в каталоге SubDir1.

Все приложения ASP.NET наследуют параметры по умолчанию, заданные в фале Web.config на корневом уровне. Содержащиеся в этом файле стандартные параметры секции конфигурации, отвечающей за безопасность, разрешают всем пользователям доступ ко всем URL-ресурсам. В корневом каталоге данного образца приложения отсутствует файл конфигурации, который изменял бы политику безопасности; таким образом, к ресурсам ASP.NET в этом приложении имеют доступ все пользователи (поскольку этот каталог наследует политику безопасности из файла конфигурации уровня компьютера). Если файл Web.config в каталоге SubDir1 содержит секцию конфигурации безопасности, разрешающую доступ к данным этого каталога только отдельным пользователям, то каталог SubDir1A унаследует эти параметры. Таким образом, доступ к ресурсам ASP.NET в корневом каталоге и в каталоге SubDir2 разрешен всем пользователям, а в каталогах SubDir1 и SubDir1A — только выбранным пользователям.

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

MyDir
    SubDir1 (mapped from VDir1)
        SubDir1A (mapped from VDir1A)
            MyResource.aspx
    SubDir2

В этом примере один файл Web.config находится в каталоге SubDir1, а другой — в каталоге SubDir1A. При обращении клиента к ресурсу «C:\Subdir1\Subdir1A\MyResource.aspx» по URL-адресу «http://localhost/vdir1/subdir1A/MyResource.aspx», ресурс наследует параметры конфигурации от Vdir1. Однако, при обращении клиента к тому же самому ресурсу по URL-адресу «http://localhost/vdir1A/MyResource.aspx», ресурс не будет наследовать параметры от Vdir1. Поэтому создание виртуальных каталогов таким образом не рекомендуется, так как это может привести к непредсказуем результатам или даже сбою приложения.

Службы IIS являются веб-сервером для всех ресурсов, опубликованных в Интернете. Система конфигурации ASP.NET применяется только к тем ресурсам ASP.NET, которые зарегистрированы, как ресурсы, управляемые ASP.NET с использованием Aspnet_isapi.dll. По умолчанию, система конфигурации не обеспечивает безопасность для ресурсов, не относящихся к ASP.NET. Так, например, всем пользователям доступны файлы ASP, HTML, TXT, GIF и JPEG. В предыдущем примере, при разрешенном просмотре каталогов и при отсутствии других ограничений, все пользователи могут просматривать файлы, не обрабатываемые ASP.NET и находящиеся в корневом каталоге приложения, а также в каталогах SubDir1 и SubDir2.

Показ: