ASP.NETMVCアプリケーションにモジュールがあります。モジュールは正常に動作していますが、静的コンテンツを含むすべてのタイプのファイルに対して起動しています。
<modules runAllManagedModulesForAllRequests="false">
<add name="MyModule" ... / >
</modules>
モジュールはAcquireRequestStateイベントとPostRequestHandlerExecuteイベントをフックし、両方とも静的コンテンツの起動(.htm、.css、.pngなど)を表示します。
runAllManagedModulesForAllRequests = "false"は、ASP.NET以外のコンテンツでモジュールが起動しないようにする必要があるという印象を受けました。
明確にするために:
preCondition="managedHandler"を次のように設定できます。
<add name="MyModule" type="MyApp.MyModule" preCondition="managedHandler" />
モジュールに管理対象リクエストのみを起動させます。
ただし、IISパイプラインが一般的にすべての要求に対してマネージモジュールヒットを発生させている理由を理解しようとしています。runAllManagedModulesForAllRequests = "true"でない限り、アンマネージコンテンツをASP.NETモジュールに起動していなかった古いバージョンでは、これは問題なく機能していたと思います。
統合パイプラインモードを使用して、Windows864ビットモードのIIS8で実行します。
アップデート:
さらに調査した結果、次のことが当てはまることがわかりました。
- runAllManagedModulesForAllRequests = "true"の場合、すべてのモジュール-preCondition属性の設定に関係なく、すべてのリクエストで起動します。これは、HttpApplicationに実装されているApplication_XXXXイベントにも当てはまります。
- runAllManagedModulesForAllRequests = "false"は、preCondition = "managedHandler"が設定されていない限り、アンマネージリクエストがモジュールにヒットしないようにする効果はありません。
- runAllManagedModulesForAllRequests = "false"はApplication_XXXXイベントに影響を与えるため、これらのイベントは管理対象リクエストでのみ発生します。IOW、Application_XXXXは、「モジュール」実装にpreCondition="managedHandler"があるかのように動作します
これに関する詳細については、ブログエントリを投稿しました: http ://www.west-wind.com/weblog/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78