web-dev-qa-db-ja.com

IIS7-ロック違反エラー、HTTPハンドラー、モジュール、および<clear />要素

独自のHTTPハンドラーセットを使用し、モジュールを必要としないASP.NETサイトがあります。

したがって、IIS6では、web.configでこれを実行するだけでした。

<httpModules>
    <clear />
</httpModules>

ただし、IIS7のsystem.webServerエリアで同じことを実行しようとすると、サイトを表示しようとすると500エラーが発生し、IISマネージャでハンドラーマッピングを表示すると、次のメッセージのポップアップボックスが表示されます。

この操作の実行中にエラーが発生しました

詳細:

ファイル名:

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

行番号:39

エラー:ロック違反

39行目は<clear />要素がある場所です。

いくつかのグーグルは私にこのコマンドを実行することを含む解決策を導きました:

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

...しかし問題は解決しませんでした。

18
Daniel Schaffer

これは仕様によるものです。 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" />

また、興味のある方のために、なぜこれを行うのかについて backstory を示します。

11

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

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

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

  2. の中に <system.webServer>要素、すべてのモジュールのlockItem属性をfalseに変更します。

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

    <system.webServer>
       <modules>
          <clear />
       </modules>
    </system.webServer>
    
  4. もちろん、Scottが指摘するように、これはWebサーバーが残っていないことを意味するため、ここにモジュールの最小セットがあります[〜#〜] i [〜#〜]私のコンテンツを再度実行するために必要(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
Daniel Schaffer

手遅れにならないようにお願いします。

今日この問題が発生し、ApplicationHost.Config XMLノードに続く編集問題を修正しました:

httpErrors lockAttributes = "allowAbsolutePathsWhenDelegated、defaultPath"

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

参考になれば幸いです。

2
Mercante

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

0
CCS