У меня есть сайт ASP.NET, который использует собственный набор обработчиков HTTP и не требует никаких модулей.
Итак, в IIS6 все, что мне нужно было сделать, это в моем web.config:
<httpModules>
<clear />
</httpModules>
Однако, если я попытаюсь сделать то же самое в system.webServer
область для IIS7, я получаю ошибку 500 при попытке просмотра сайта, а в диспетчере IIS, когда я пытаюсь просмотреть сопоставления обработчиков, я получаю всплывающее окно с сообщением:
При выполнении этой операции произошла ошибка
Подробности:
Имя файла:
\? \ C: \ Sites \ TheWebSiteGoesHere \ web.config
Номер строки: 39
Ошибка: нарушение блокировки
В строке 39 <clear />
элемент есть.
Некоторый поиск в Google привел меня к решению, включающему запуск этой команды:
%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/modules
... но это не решило проблему.
Это по замыслу. Раздел system.webServer по сути определяет сам IIS. Если да, то ни с чем не останетесь. В applicationHost.config у вас должно быть что-то вроде этого:
<modules>
<add name="HttpCacheModule" lockItem="true" />
<add name="DynamicCompressionModule" lockItem="true" />
<add name="StaticCompressionModule" lockItem="true" />
<add name="DefaultDocumentModule" lockItem="true" />
<add name="DirectoryListingModule" lockItem="true" />
<add name="IsapiFilterModule" lockItem="true" />
<add name="ProtocolSupportModule" lockItem="true" />
<add name="HttpRedirectionModule" lockItem="true" />
<add name="StaticFileModule" lockItem="true" />
...
Обратите внимание на свойства lockItem. Поскольку есть 1 или более элементов блокировки, вызовет нарушение блокировки.
Итак, вам нужно либо специально удалить только те элементы, которые вам не нужны из web.config, либо, если вам действительно нужно очистить их все и добавить обратно свои, тогда в applicationHost.config удалите lockItem = "true" на каждый из этих элементов и не забудьте добавить их достаточно, чтобы ваш веб-сервер действительно работал.
редактировать
(Приложил дополнительную информацию от Дэниела по его запросу (Скотт))
Вот что я сделал на основании того, что сказал Скотт:
Открыл applicationHost.config в% windir% \ system32 \ inetsrv \ config. Обратите внимание, что в 64-битной Windows Server 2008 вам нужно будет отредактировать файл с помощью 64-битного редактора (собственный Блокнот подойдет, но Notepad ++ не сможет найти файл). См. Здесь для получения дополнительной информации об этом.
В элементе измените атрибут lockItem на всех модулях на false.
Затем в файле web.config моего веб-приложения я смог сделать следующее:
<system.webServer>
<modules>
<clear />
</modules>
</system.webServer>
Конечно, как указывает Скотт, это означает, что веб-сервера не осталось, поэтому вот минимальный набор модулей, который мне нужен, чтобы снова запустить мои вещи (YMMV):
<add name="HttpRedirectionModule" lockItem="false" />
<add name="StaticFileModule" lockItem="false" />
<add name="CustomLoggingModule" lockItem="false" />
<add name="CustomErrorModule" lockItem="false" />
<add name="IsapiModule" lockItem="false" />
<add name="AnonymousAuthenticationModule" lockItem="false" />
Также для всех, кто интересуется, вот предыстория относительно того, почему я это делаю.
Надеюсь, еще не поздно помочь.
Сегодня у меня возникла эта проблема, и я исправил проблему, редактирующую следующий узел XML ApplicationHost.Config:
httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated, defaultPath"
Удалите это ", defaultPath" и перезапустите IIS (iisreset).
Надеюсь, это поможет.
Скотт, можешь добавить это в свой ответ?
Вот что я сделал на основании того, что сказал Скотт:
Открыт applicationHost.config
в %windir%\system32\inetsrv\config
. Обратите внимание, что в 64-битной Windows Server 2008 вам нужно будет отредактировать файл с помощью 64-битного редактора (собственный Блокнот подойдет, но Notepad ++ не сможет найти файл). Видеть Вот для получения дополнительной информации об этом.
в <system.webServer>
элемент, измените lockItem
атрибут на всех модулях false
.
Затем в файле web.config моего веб-приложения я смог сделать следующее:
<system.webServer>
<modules>
<clear />
</modules>
</system.webServer>
Конечно, как указывает Скотт, это означает, что веб-сервера не осталось, поэтому вот минимальный набор модулей. я нужно снова запустить мои вещи (YMMV):
<add name="HttpRedirectionModule" lockItem="false" />
<add name="StaticFileModule" lockItem="false" />
<add name="CustomLoggingModule" lockItem="false" />
<add name="CustomErrorModule" lockItem="false" />
<add name="IsapiModule" lockItem="false" />
<add name="AnonymousAuthenticationModule" lockItem="false" />
Также для всех, кому интересно, вот предыстория того, почему я это делаю.
Попробуйте удалить исходный файл web.config (создать резервную копию) и после внесения изменений через IIS (он создаст новый файл web.config) восстановите исходные изменения. Если вы настраиваете HTTP-ОШИБКИ, следуйте этому http://paymentgatewayintegrationhelp.com/Tech-Help/HTTP-Errors-and-webconfig-Lock-Violation-1140.asp