IIS7-잠금 위반 오류, HTTP 처리기, 모듈 및 <clear /> 요소


18

자체 HTTP 처리기 집합을 사용하는 ASP.NET 사이트가 있으며 모듈이 필요하지 않습니다.

따라서 IIS6에서는 web.config 에서이 작업 만 수행했습니다.

<httpModules>
    <clear />
</httpModules>

그러나 system.webServerIIS7 영역 에서 동일한 작업을 수행 하려고하면 사이트를 보려고 할 때 500 오류가 발생하고 IIS 관리자에서 처리기 매핑을 보려고하면 메시지와 함께 팝업 상자가 나타납니다.

이 작업을 수행하는 동안 오류가 발생했습니다

세부:

파일 이름:

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

줄 번호 : 39

오류 : 잠금 위반

39 행은 <clear />요소 가있는 곳 입니다.

일부 인터넷 검색으로 인해이 명령을 실행하는 솔루션이 생겼습니다.

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

...하지만 문제가 해결되지 않았습니다.

답변:


11

의도적으로 설계된 것입니다. 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 속성을 확인하십시오. 잠금 항목이 하나 이상 있으므로 잠금 위반이 발생합니다.

따라서 web.config에서 원하지 않는 항목 만 제거하거나 실제로 모든 항목을 지우고 직접 다시 추가 해야하는 경우 applicationHost.config에서 lockItem = "true" 웹 서버가 실제로 작동 할 수 있도록 각 요소를 다시 추가해야합니다.

편집하다

(요청에 따라 Daniel의 추가 정보를 추가했습니다. (Scott))

Scott의 말을 바탕으로 내가 한 일은 다음과 같습니다.

% windir % \ system32 \ inetsrv \ config에서 applicationHost.config를 열었습니다. 64 비트 Windows Server 2008에서는 64 비트 편집기를 사용하여 파일을 편집해야합니다 (기본 메모장은 해당하지만 메모장 ++에서는 파일을 찾을 수 없음). 이에 대한 자세한 내용은 여기를 참조하십시오.

요소에서 모든 모듈의 lockItem 속성을 false로 변경하십시오.

내 웹 응용 프로그램의 web.config 파일에서 다음을 수행 할 수있었습니다.

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

물론 Scott이 지적했듯이 웹 서버가 남아 있지 않다는 것을 의미하므로 내 물건을 다시 실행하는 데 필요한 최소 모듈 세트는 다음과 같습니다 (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" />

또한 관심있는 사람들 을 위해, 왜 내가 이것을하고 있는지에 대한 배경 이야기 가 있습니다.


2

스캇, 당신의 대답에 이것을 추가 할 수 있습니까?

Scott의 말을 바탕으로 내가 한 일은 다음과 같습니다.

  1. 에 개설 applicationHost.config했습니다 %windir%\system32\inetsrv\config. 64 비트 Windows Server 2008에서는 64 비트 편집기를 사용하여 파일을 편집해야합니다 (기본 메모장은 해당하지만 메모장 ++에서는 파일을 찾을 수 없음). 이에 대한 자세한 내용은 여기 를 참조 하십시오 .

  2. 에서 <system.webServer>요소의 변경 lockItem에 대한 모든 모듈에 대한 속성을 false.

  3. 내 웹 응용 프로그램의 web.config 파일에서 다음을 수행 할 수있었습니다.

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. 스콧이 지적 하듯 물론,이 수단, 그래서 여기에 남아있는 웹 서버 모듈의 최소 세트가되어 없습니다 나는 내 물건이 다시 (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" />

또한 관심있는 사람을 위해 여기 왜 내가 이것을하고 있는지에 대한 배경 이야기가 있습니다.


마지막 비트의 서식에 대해 죄송합니다. 어떤 이유로 일반적인 "코드"형식으로 표시되지 않습니다.
Daniel Schaffer

확실한 것. 방금 추가했습니다.
Scott Forsyth-MVP

2

도움이 늦지 않기를 바랍니다.

오늘이 문제가 발생하여 ApplicationHost.Config XML 노드에 따라 편집하는 문제를 해결하십시오.

httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated, defaultPath"

해당 ", defaultPath"를 제거하고 IIS (iisreset)를 다시 시작하십시오.

도움이 되길 바랍니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.