5

IIS構成に関するものなので、この質問をServerFaultにも投稿する必要があるかどうかわかりませんか?

IIS7では、次の方法で、管理対象コンテンツに対して実行するようにモジュールに指示できます(したがって、静的コンテンツの提供が高速化されます)。

<modules>
    ...
    <add name="WhateverName"
         type="WhateverType"
         preCondition="managedHandler"
    ...
</modules>

だが。要求されたURLにファイル名(拡張子付き)も含まれている限り、これは問題なく機能します。省略した場合、IIS7は静的コンテンツが必要であると見なし、管理対象モジュールは実行されません。

http://localhost/ <-- this one will skip managed handlers
http://localhost/default.aspx <-- this one will run them

default.aspxIIS7のデフォルトのドキュメントを手動で設定した場合、最初のドキュメントはです。違いはありません。違いはありません。私には、これはバグのように見え、歩き、聞こえます。そしてそれはバグです!なんで?私が最初のものを要求するとき、それは管理された要求ですからね。もちろん。ただし、IIS7はそれを静的リクエストとして扱います。それで?バグです。このリクエストは管理対象として扱われる必要があります。

ファイル名を含まないURLリクエストに対してマネージドハンドラーを実行するようにIIS7を説得するにはどうすればよいですか?

考えるのを手伝ってください

私が考えることであなたを少し助けさせてください:私が再注文するならばsystem.webServer/handlers、私はこれを解決することができると確信しています。StaticFileを指す最後のハンドラーの前に、StaticFileModuleディレクトリ要求で統合asp.netハンドラーを実行する必要がありますDefaultDocumentModuleDirectoryBrowsingModuleまたは、ディレクトリ要求にデフォルトのドキュメントを追加する独自のハンドラーを作成します。私はこれらの1つがそれを解決するはずだとかなり確信しています。しかし、どのように構成/開発する必要がありますか?

4

3 に答える 3

6

問題はリクエスト処理順です。IIS7 は、IIS の Handlers 構成要素で指定された順序で要求を処理します。デフォルトでは、IIS 構成の Handlers 要素には以下が含まれます

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />

ハンドラの最後に。したがって、以前に指定されたハンドラーに一致しないすべての要求は、このハンドラーによって処理されます (フォルダー要求も含む)。

ハンドラー構成でclear要素を使用してすべてのデフォルト ハンドラーを削除し、独自の要求処理順序を指定できます。

最後に StaticFile ハンドラーなしで、デフォルトの IIS ハンドラー構成 (C:\Windows\System32\inetsrv\config\applicationHost.config) を Web 構成にコピーすることをお勧めします。

次に、静的コンテンツ タイプ (jpg、gif、js、css) ごとに特定の静的コンテンツ ハンドラーを追加する必要があります。

<add name="StaticFile-swf" path="*.swf" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-png" path="*.png" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-gif" path="*.gif" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-jpg" path="*.jpg" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-css" path="*.css" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
<add name="StaticFile-js" path="*.js" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />

その後のフォルダー要求のマネージド ハンドラー (PageHandlerFactory)。

<add name="PageHandlerFactory-Folders" path="*" verb="*" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" resourceType="Unspecified" requireAccess="Read" allowPathInfo="false" preCondition="integratedMode" />

最後に StaticFile ハンドラも追加する必要があります。

ここに例があります。

于 2009-08-25T09:32:45.783 に答える
1

削除preCondition="managedHandler"または追加する<modules runAllManagedModulesForAllRequests="true">必要があります。このページの「前提条件」セクションに詳細があります。

于 2009-08-12T17:54:43.110 に答える
0

ワイルド カード スクリプト マッピングを使用できますが、マネージ ハンドラーを使用してすべての要求を処理するのは効率的ではありません。静的ハンドラーは、適切な場合にはるかに効率的です。

于 2009-08-12T17:56:53.607 に答える