我有一个ASP.NET站点,它使用自己的一组HTTP处理程序,不需要任何模块。
所以,在IIS6中,我要做的就是在我的web.config中这样做:
<httpModules>
<clear />
</httpModules>但是,如果我试图在system.webServer区域中为IIS7执行同样的操作,当我试图查看站点时会出现500个错误,而在IIS7中,当我试图查看处理程序映射时,会得到一个弹出框,其中包含以下消息:
执行此操作详细信息时出错:文件名:\?\C:\Sites\TheWebSiteGoesHere\web.config行号: 39错误:锁冲突
第39行是<clear />元素所在的位置。
一些人在googling中帮助我找到了一个解决方案,包括运行以下命令:
%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/modules
...but并没有解决这个问题。
发布于 2009-10-09 03:03:29
那是故意的。<modules>部分的system.webServer本质上定义了IIS本身。如果你<clear />,你就不会被留下任何东西。在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属性。因为有一个或多个锁项,所以会抛出一个锁冲突。
因此,您需要专门从web.config中删除不想要的项,或者如果确实需要清除所有项并添加回您自己的项,那么在applicationHost.config中删除每个元素上的lockItem="true“,并确保将足够的内容添加回web服务器,这样您的web服务器才能真正工作。
(根据丹尼尔的要求,附上他的进一步资料。(Scott)
以下是我根据斯科特的话所做的事情:
在%windir%\system32 32\inetsrv\config中打开applicationHost.config。请注意,在64位Windows 2008中,您需要使用64位编辑器编辑文件(本机记事本可以完成,但Notepad++将无法找到该文件)。有关这方面的更多信息,请参见这里。
在<system.webServer>元素中,将所有模块上的lockItem属性更改为false。
在我的web应用程序的web.config文件中,可以执行以下操作:
<system.webServer>
<modules>
<clear />
</modules>
</system.webServer>当然,正如Scott所指出的,这意味着已经没有web服务器了,所以这里是我重新运行我的东西所需的最小模块集(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" />另外,对于任何感兴趣的人,这是关于我为什么要这么做的背景故事。
发布于 2009-10-09 16:00:04
斯科特,你能把这个附加到你的答案里吗?
以下是我根据斯科特的话所做的事情:
applicationHost.config in %windir%\system32\inetsrv\config。请注意,在64位Windows 2008中,您需要使用64位编辑器编辑文件(本机记事本可以完成,但Notepad++将无法找到该文件)。有关此问题的更多信息,请参见这里。<system.webServer>元素中,将所有模块上的lockItem属性更改为false。<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" />另外,对于任何感兴趣的人,下面是我为什么要这么做的背景故事。
发布于 2011-03-04 06:14:07
我希望现在帮助还不算太晚。
我今天遇到了这个问题,并修复了以下ApplicationHost.Config XML节点的编辑问题:
lockAttributes="allowAbsolutePathsWhenDelegated,httpErrors defaultPath“
删除",defaultPath“并重新启动IIS (iis重置)。
我希望它能帮上忙。
https://serverfault.com/questions/72338
复制相似问题