Iis-7

IIS7 - 鎖定衝突錯誤、HTTP 處理程序、模組和 <clear /> 元素

  • October 1, 2020

我有一個 ASP.NET 站點,它使用自己的一組 HTTP 處理程序並且不需要任何模組。

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

<httpModules>
   &lt;clear /&gt;
&lt;/httpModules&gt;

但是,如果我嘗試在system.webServerIIS7 區域中執行相同操作,則在嘗試查看站點時會收到 500 錯誤,並且在 IIS 管理器中嘗試查看處理程序映射時,會收到一個帶有消息的彈出框:

執行此操作時出錯

細節:

文件名:

?\C:\Sites\TheWebSiteGoesHere\web.config

行號:39

錯誤:鎖衝突

第 39 行是&lt;clear /&gt;元素所在的位置。

一些Google搜尋使我找到了一個涉及執行此命令的解決方案:

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

…但這並沒有解決問題。

這是設計使然。&lt;modules&gt;system.webServer 部分本質上定義了 IIS 本身。如果你&lt;clear /&gt;,你將一無所有。在 applicationHost.config 中,您應該有如下內容:

       &lt;modules&gt;
           &lt;add name="HttpCacheModule" lockItem="true" /&gt;
           &lt;add name="DynamicCompressionModule" lockItem="true" /&gt;
           &lt;add name="StaticCompressionModule" lockItem="true" /&gt;
           &lt;add name="DefaultDocumentModule" lockItem="true" /&gt;
           &lt;add name="DirectoryListingModule" lockItem="true" /&gt;
           &lt;add name="IsapiFilterModule" lockItem="true" /&gt;
           &lt;add name="ProtocolSupportModule" lockItem="true" /&gt;
           &lt;add name="HttpRedirectionModule" lockItem="true" /&gt;
           &lt;add name="StaticFileModule" lockItem="true" /&gt;
           ...

注意 lockItem 屬性。因為有 1 個或多個鎖項,會拋出鎖衝突。

因此,您要麼需要專門從 web.config 中刪除您不想要的項目,要麼如果您確實需要將它們全部清除並添加回您自己的項目,則在 applicationHost.config 中刪除 lockItem=“true"這些元素中的每一個,並確保添加足夠多的元素,以便您的 Web 伺服器能夠真正工作。

編輯

(根據丹尼爾的要求,附加了丹尼爾的更多資訊。(斯科特))

這是我根據斯科特所說的所做的:

在 %windir%\system32\inetsrv\config 中打開了 applicationHost.config。請注意,在 64 位 Windows Server 2008 中,您需要使用 64 位編輯器編輯文件(本機記事本可以,但 Notepad++ 無法找到該文件)。有關這方面的更多資訊,請參見此處。

在該&lt;system.webServer&gt;元素中,將所有模組的 lockItem 屬性更改為 false。

在我的 Web 應用程序的 web.config 文件中,可以執行以下操作:

&lt;system.webServer&gt;
  &lt;modules&gt;
     &lt;clear /&gt;
  &lt;/modules&gt;
&lt;/system.webServer&gt;

當然,正如 Scott 指出的那樣,這意味著沒有剩餘的 Web 伺服器,所以這裡是讓我的東西再次執行所需的最少模組集(YMMV):

&lt;add name="HttpRedirectionModule" lockItem="false" /&gt;

&lt;add name="StaticFileModule" lockItem="false" /&gt;

&lt;add name="CustomLoggingModule" lockItem="false" /&gt;

&lt;add name="CustomErrorModule" lockItem="false" /&gt;

&lt;add name="IsapiModule" lockItem="false" /&gt;

&lt;add name="AnonymousAuthenticationModule" lockItem="false" /&gt;

此外,對於任何感興趣的人,這裡是關於我為什麼這樣做的背景故事。

引用自:https://serverfault.com/questions/72338