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プロパティに注目してください。1つ以上のロック項目があるため、ロック違反がスローされます。

そのため、web.configから不要なアイテムのみを明確に削除するか、それらをすべてクリアして独自に追加する必要がある場合は、applicationHost.configでlockItem = "true"を削除します。それらの各要素を追加し、Webサーバーが実際に機能するように十分な数の要素を追加してください。

編集

(ダニエルからの追加情報、彼の要求ごと。(スコット))

スコットが言ったことに基づいて私がしたことは次のとおりです。

%windir%\ system32 \ inetsrv \ configでapplicationHost.configを開きました。64ビットWindows Server 2008では、64ビットエディターでファイルを編集する必要があることに注意してください(ネイティブのメモ帳でできますが、Notepad ++はファイルを見つけることができません)。詳細については、こちらをご覧ください。

要素で、すべてのモジュールの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" />

また、興味がある人のために、私がこれをしている理由についてのバックストーリーがあります。


2

スコット、これを答えに追加できますか?

スコットが言ったことに基づいて私がしたことは次のとおりです。

  1. で開きapplicationHost.configました%windir%\system32\inetsrv\config。64ビットWindows Server 2008では、64ビットエディターでファイルを編集する必要があることに注意してください(ネイティブのメモ帳でできますが、Notepad ++はファイルを見つけることができません)。詳細については、こちらをご覧ください。

  2. では<system.webServer>要素、変更lockItemするすべてのモジュールに属性をfalse

  3. 私のWebアプリケーションのweb.configファイルでは、次のことができました。

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. もちろん、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" />

また、興味のある方のために、ここに私がこれをしている理由についての裏話があります。


その最後のビットのフォーマットについては申し訳ありません...何らかの理由で通常の「コード」フォーマットでは表示されません。
ダニエルシャファー

確実なこと。ちょうどそれを追加しました。
スコットフォーサイス

2

私はそれが手遅れではないことを願っています。

今日この問題を取得し、ApplicationHost.Config XMLノードに続く編集の問題を修正しました。

httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated、defaultPath"

その「、defaultPath」を削除し、IISを再起動します(iisreset)。

お役に立てば幸いです。


0

元のweb.configを削除して(バックアップを作成)、IISで変更を加えた後(新しいweb.configを作成します)、元の変更を復元します。HTTPエラーを設定する場合は、http: //paymentgatewayintegrationhelp.com/Tech-Help/HTTP-Errors-and-webconfig-Lock-Violation-1140.aspに従ってください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.