В моем web.config есть этот раздел:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<security>
<authentication>
<anonymousAuthentication enabled="true" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
IIS7 аварийно завершает работу и жалуется на раздел аутентификации:
Модуль AnonymousAuthenticationModule
Уведомление AuthenticateRequest
Обработчик StaticFile
Код ошибки 0x80070021
Ошибка конфигурации. Этот раздел конфигурации нельзя использовать по этому пути. Это происходит, когда раздел заблокирован на родительском уровне. Блокировка либо по умолчанию (overrideModeDefault = "Deny"), либо явно устанавливается тегом местоположения с overrideMode = "Deny" или устаревшим allowOverride = "false".
Config Source
69: <authentication>
70: <anonymousAuthentication enabled="true" />
Итак, обычный способ решить эту проблему - войти в %windir%\system32\inetsrv\config\applicationHost.config
и разблокируем раздел:
<sectionGroup name="system.webServer">
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Allow" />
<section name="basicAuthentication" overrideModeDefault="Allow" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Allow" />
<section name="digestAuthentication" overrideModeDefault="Allow" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Allow" />
<section name="windowsAuthentication" overrideModeDefault="Allow" />
</sectionGroup>
(альтернативно, appcmd unlock config
).
Странная вещь: я сделал это, а он до сих пор жалуется.
Я искал местоположения (MVC - это имя моего веб-сайта, который является корнем всех сайтов, которые я использую):
<location path="MVC" overrideMode="Allow">
<system.webServer overrideMode="Allow">
<security overrideMode="Allow">
<authentication overrideMode="Allow">
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</location>
Тем не менее он взрывается. Я не понимаю, почему это происходит. Я не могу удалить его из web.config, я хочу найти корень проблемы.
Есть ли способ получить конкретную информацию от IIS, какое правило в конечном итоге меня отказывает?
Редактировать: Я смог исправить это с помощью консоли управления IIS7, перейдя в самый корневой каталог (моя машина), нажав «Изменить конфигурацию» и разблокировав там раздел. Тем не менее, я хотел бы знать, есть ли лучший способ, поскольку я не могу найти файл, который он фактически изменяет.
Разработал следующие шаги, которые решают проблему для меня:
system.webServer/security/authentication/anonymousAuthentication
system.webServer/security/authentication/windowsAuthentication
Это решило мою ошибку в Windows Server 2012, IIS 8.5. Должен работать и для других версий.
.NET Extensibility 4.5
и ASP>NET 4.5
, обе записи ISAPINET 3.5
, .NET 4.5
, ASP.NET 4.5
Web Server (all)
, Management Tools (IIS Management Console and Management Service)
, Windows
Блокировка конфигурации может произойти:
Applicationhost.config (строка конфигурации: MACHINE / WEBROOT / APPHOST)
файл Site Web.config (MACHINE / WEBROOT / APPHOST / Имя веб-сайта)
Любой файл приложения web.config, который (MACHINE / WEBROOT / APPHOST / Site Name / App Name)
Блокировка раздела (раздел: раздел конфигурации IIS, например <asp>
) позволяет запретить возможность настройки этих параметров любому, кто находится на более низком уровне иерархии, чем вы.
Использование функции делегирования функций в графическом пользовательском интерфейсе не является неправильным и делает очень похожую вещь на то, что делает AppCMD, под обложками - устанавливает OverrideMode для данного раздела в <location>
на любом уровне конфигурации, на котором вы сосредоточены.
APPCMD можно использовать для разблокировки файлов, но обратите внимание на то, где он говорит, что это делает - это не так умно, как графический интерфейс.
Добавление -commit:apphost
до конца твоего APPCMD UNLOCK
команда нацелена на Applicationhost.config, который то ключевой файл для работы IIS (заменяет метабазу из более ранних версий; хранит все централизованные настройки, но позволяет переопределения (если вы это делаете) в файлах web.config).
Без -commit: apphost APPCMD будет нацеливаться на ближайшее логическое место для файла web.config - будь то на уровне сайта или приложения, и указывать, что он изменил параметр, используя строку конфигурации, подобную приведенной выше. (Кроме того: вы все еще можете настроить таргетинг только на настройки на дочерних веб-сайтах, но сделайте привязку к apphost - для этого используются теги местоположения)
Итак, если он сказал (пересказ памяти) «Изменения, внесенные в MACHINE / WEBROOT / APPHOST», это будет означать верхний уровень иерархии IIS.
Если он говорит «привязан к MACHINE / WEBROOT / APPHOST / Dodgy Web Site», это будет означать, что он проверил физический путь к Dodgy Web Site и записал файл web.config (или обновил его) в этом месте.
Если вы используете IISExpress и Visual Studio 2015, applicationHost.config
хранится в $(solutionDir).vs\config\applicationhost.config
(спасибо Nime Cloud's ответ).
Просто измени overrideModeDefault="Allow"
везде, где это возможно.
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...
Попробуйте в своем пуле приложений, отключите поддержку 32-разрядных приложений IIS Manager -> Пулы приложений -> выберите [Your App Pool] -> Advanced Settings -> Enable 32-Bit Applications - измените его на «False»
Взгляни на IIS - этот раздел конфигурации нельзя использовать по этому пути (блокировка конфигурации?)
Принятый ответ отлично сработал для меня в Windows 10, он предписывает сделать следующее: