6

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

4

1 に答える 1

7

IIS7で、Microsoftは、ネイティブコードだけでなく、マネージド(.NET)コードを使用してモジュールとハンドラーを開発する新しい方法を導入しました。問題は、マネージドコードとネイティブコードの間でリクエストを切り替えるのは非常にコストがかかるため、Microsoftがを導入したことpreCondition="managedHandler"です。モジュールに管理対象コンテンツ要求(.aspx、.asmx、...)でのみ使用可能としてフラグを立てるため、IISは静的コンテンツに対してモジュールを起動することを回避します。

これで、JavaScriptをその場で縮小するなど、静的コンテンツリクエストを変更したい状況が発生する可能性があります。モジュールはC#を使用して記述し、管理対象モジュールとしてコンパイルできますが、静的コンテンツに対して起動する必要があるため、単にとしてマークを付けないでくださいmanagedHandler

最後に、それらすべてが解雇runAllManagedModulesForAllRequests="true"されるようにオーバーライドするために使用されます。preCondition="managedHandler"

詳細については、
http ://www.iis.net/learn/get-started/introduction-to-iis/iis-modules-overview#Preconditionを参照してください。

于 2012-10-25T04:19:23.580 に答える