IIS7 – locking违规错误,HTTP处理程序,模块和<clear />元素

我有一个ASP.NET站点,它使用自己的一套HTTP处理程序,并不需要任何模块。

所以,在IIS6中,我所要做的就是在我的web.config中:

<httpModules> <clear /> </httpModules> 

但是,如果我尝试在IIS7的system.webServer区域中执行相同的操作,则当我尝试查看该站点时,出现500错误;在IISpipe理器中,当我尝试查看处理程序映射时,出现一个popup框消息:

执行此操作时发生错误

细节:

文件名:

?\ \ C:\网站\ TheWebSiteGoesHere \的web.config

行号:39

错误:locking违规

第39行是<clear />元素的位置。

一些使用Googlesearch的解决scheme涉及到运行这个命令:

%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/modules

…但是这并没有解决问题。

这是devise。 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属性。 因为有一个或多个锁项目,将会违反locking。

所以,你需要特别从web.config中删除你不想要的项目,或者如果你真的需要清除所有的项目并添加自己的项目,那么在applicationHost.config中,移除lockItem =“true”每个这些元素,并确保添加足够的他们,以便您的Web服务器将实际工作。

编辑

(根据他的请求附上丹尼尔的更多信息(斯科特))

这是我根据斯科特所说的做的:

在%windir%\ system32 \ inetsrv \ config中打开applicationHost.config。 请注意,在64位Windows Server 2008中,您需要使用64位编辑器编辑文件(本机记事本将执行该操作,但Notepad ++将无法find该文件)。 在这里看到更多关于这方面的信息。

在元素中,将所有模块的lockItem属性更改为false。

在我的Web应用程序的web.config文件中,然后可以执行以下操作:

 <system.webServer> <modules> <clear /> </modules> </system.webServer> 

当然,正如Scott指出的那样,这意味着没有networking服务器了,所以下面是我需要的一些模块(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" /> 

另外,对于任何感兴趣的人来说,这里是我为什么这样做的背景故事 。

斯科特,你可以把这个附加到你的答案吗?

这是我根据斯科特所说的做的:

  1. %windir%\system32\inetsrv\config打开applicationHost.config 。 请注意,在64位Windows Server 2008中,您需要使用64位编辑器编辑文件(本机记事本将执行该操作,但Notepad ++将无法find该文件)。 在这里看到更多关于这方面的信息。

  2. <system.webServer>元素中,将所有模块的lockItem属性更改为false

  3. 在我的Web应用程序的web.config文件中,然后可以执行以下操作:

     <system.webServer> <modules> <clear /> </modules> </system.webServer> 
  4. 当然,正如Scott指出的那样,这意味着没有networking服务器了,所以下面是需要的一些模块(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" />

另外,对于任何感兴趣的人来说, 这里是我为什么这样做的背景故事 。

我希望现在帮助也不迟。

我今天得到了这个问题,并解决了编辑下面的ApplicationHost.Config XML节点的问题:

httpErrors lockAttributes =“allowAbsolutePathsWhenDelegated,defaultPath”

删除“,defaultPath”并重新启动IIS(iisreset)。

我希望它的帮助。

尝试删除原来的web.config(创build备份),并通过IIS(它将创build新的web.config)进行更改后恢复原来的更改。 如果您configurationHTTP错误请按照此http://paymentgatewayintegrationhelp.com/Tech-Help/HTTP-Errors-and-webconfig-Lock-Violation-1140.asp