2

それにかんする<modules runAllManagedModulesForAllRequests="true">

MSDNのドキュメントには、属性について記載されています。

読み取り/書き込みブール値。すべての管理対象モジュールがすべての要求に対して実行される場合はtrue。それ以外の場合はfalse。デフォルトはfalseです。

この記事では、その「真の」値の動作についてもう少し詳しく説明します。

この強く推奨される修正は、他の問題を引き起こす可能性があります。これらの問題は、管理対象のリクエスト(.aspxなど)だけでなく、登録されているすべてのHTTPモジュールをすべてのリクエストで実行するという形で発生します。これは、モジュールが.jpg .gif .css.html.pdfなどで実行されることを意味します。

今について:runAllManagedModulesForAllRequests =" false " ..。

私の質問(MSDNのドキュメントでは詳細に触れていないようです)は、すべての要求に対してすべての管理対象モジュールを実行しないという一般的な説明以外に、false値はどのように動作するのですか?

たとえば、「false」は一部のモジュールをスキップしますが、他のモジュールの束を介してリクエストを実行しますか。リクエストは、ハンドラーなどのように処理する最初のモジュールで停止しますか?また、管理されていないモジュールはどのように動作に適合しますか?

全体として、この振る舞いについての良いガイドや説明はありますか?

4

2 に答える 2

2

何をするかには微妙な違いがあるので、このテーマに関するRickStrahlのブログ投稿に興味があるかもしれrunAllManagedModulesForAllRequests="false"ません。

runAllManagedModulesForAllRequests = "false"-思ったよりも違う!runAllManagedModulesForAllRequests = "false"を設定すると、それほど明白ではありません。おそらく、ASP.NET以外の要求がASP.NETモジュールパイプラインを介してファネルされなくなることを期待するでしょう。しかし、それは実際に起こることではありません。

たとえば、次のようなモジュールを作成すると、次のようになります。

<add name="SharewareModule" type="HowAspNetWorks.SharewareMessageModule"  /> 

デフォルトでは、runAllManagedModulesForAllRequestsフラグに関係なく、すべてのリクエストに対して起動します。値runAllManagedModulesForAllRequests="false"の場合でも、モジュールは、アンマネージ要求が通過した状態で起動されます。期待どおりではありません。

では、runAllManagedModulesForAllRequestsは本当に何に役立つのでしょうか。これは基本的に、managedHandlerpreConditionのオーバーライドです。web.configでハンドラーを次のように宣言すると、次のようになります。

   <add name="SharewareModule" type="HowAspNetWorks.SharewareMessageModule" preCondition="managedHandler" />

次に設定します

 <modules runAllManagedModulesForAllRequests="false" >

私のモジュールは、管理されたリクエストに対してのみ起動します。フラグをに切り替えるとtrue、モジュールはIISから渡されるすべてのIIS要求を処理することになります。

ここでの話の教訓は、ASP.NETコンテンツのみを表示する場合は preCondition="managedHandler"、このモジュールで管理対象要求のみが実行されるように、常に属性を設定する必要があるということです。ただし、これを行ったとしても、runAllManagedModulesForAllRequests="true"この設定を上書きできることに注意してください。そのため、モジュールはあらゆる種類の要求の処理を予期する必要があります。

于 2012-11-29T21:06:34.850 に答える
2

FWIW、

スコット・ハンゼルマンは、設定とその意味について良い投稿をしています。彼はまた、その存在とあなたがそれを必要としないかもしれない理由のいくつかの特定の理由を持っています。

于 2013-03-27T01:41:36.973 に答える