2011-01-09 6 views
3

IIS 7.5のASP.NET 4アプリケーションで出力キャッシュに関するいくつかの奇妙な動作があります。私は他の空のセットアップでこの問題を繰り返すことができましたが、これはバグだと確信していますが、それをMicrosoftに報告する方法は不明です。IIS7.5 OutputCacheModuleカーネルキャッシュ 'public' URLを無視する

IISのサイトが2つ以上のドメインに応答すると、.NETアプリケーションはホスト名を検査し、それに従ってコンテンツを生成します。たとえば、空白のページにリクエストURLの名前を表示することがあります。たとえば、www.first-domain.com、およびwww.second-domain.com

web.configには、system.webServerノードの下で適切なキャッシングurlCompressionおよびhttpCompressionがすべてオフになっています。

aspxページでは、キャッシュ制御ヘッダーが公開のために設定されます。これには、期限切れの将来の日付または最大有効期間の値が設定されます。

www.first-domain.comにアクセスすると、「www.first-domain.com」を書き込んだページが出力されます。

しかし、www.second-domain.comにアクセスすると、「www.first-domain.com」と表示されるページが出力されます。

System.Web.Caching.OutputCacheModuleは、要求された要求トレースを調べると、キャッシュされた出力を検出しました(.configファイルによってこの機能が無効になっています)。要求URLのホスト名が異なってもキャッシュが一致しましたしたがって、第2の要求は、第2のドメインの正しいページが現れる前に、最大有効期限/有効期限が設定されている限り、第1の要求の結果を異なるドメインに出力する。

cache-controlをプライベートに設定するか、web.configで 'OutputCache'モジュールを削除すると、ブラウザに送信された正しいキャッシュ制御ヘッダーが維持されますが、明らかに問題は解決しません私がそれを必要とするときのカーネルキャッシュの

OutputCacheModuleの設定方法に関するMSDNのドキュメントが見つかりません。

誰もがこの問題を経験しましたが、どのようにカーネルのキャッシュを有効にして、アプリケーションをIISの異なるサイトに分けることなく、URLホスト名を考慮に入れることができますか?

ありがとうございました。

更新:カーネルキャッシュはまだかかわらず、要求のホスト名の出力をキャッシュとして

SetSlidingExpirationを追加するには、効果がありません。唯一のシナリオは、出力キャッシュを無効にするか、実行する各ドメインでアプリの複製インスタンスを実行することです。出力キャッシュの使用で得られたパフォーマンスの向上と比較して、サーバーパフォーマンスの低下を考慮して、このアプリの出力キャッシュを無効にする。

答えて

2
無回答が9ヶ月後に提供されていない、と何の解決策は、唯一の回避策を見出されていない、おそらくこれが7.5より大きいIISの次のバージョンで修正される予定

...

-

SetSlidingExpirationを追加しても効果はありません。なぜなら、kernalキャッシュは要求ホスト名に関係なく出力をキャッシュしているからです。唯一のシナリオは、出力キャッシュを無効にするか、実行する各ドメインでアプリの複製インスタンスを実行することです。出力キャッシュの使用で得られたパフォーマンスの向上と比較して、サーバーパフォーマンスの低下を考慮して、このアプリの出力キャッシュを無効にする。

+0

私は非常に似た問題に直面しています。ただし、出力とカーネルキャッシュを無効にすると、 'Application_BeginRequest'までしか私を得ることができません。コントローラは呼び出されず、 'Application_BeginRequest'で設定したカスタムヘッダーは効果がありません。 – Juliano

0

私にも同様の問題があります。私はカスタムURLリライタを使用します。私はexample.com/articlesとexample.com/art-ANY_ID.htmlというページを持っています。どちらのURLもarticles.aspxにマッピングされます(2番目の例ではarticles.aspx?id = ANY_ID)。 ASP.NET 2.0とClassicパイプラインモードでは正常に動作しました。 ASP.NET 4と統合モードに変更した後、私たちは奇妙な動作をしています。 example.com/art-ANY_ID.htmlのようなページでした。

<caching enabled="true" enableKernelCache="true">セクションから<add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />を削除し、正常に動作しました。私はhttp.sysがキャッシュする理由を理解していません。

説明がありますか?

2

私は非常に似た問題を抱えていましたが、ここでは解決策はありませんでした。

TLDR:強制的Web.configOutputCacheモジュールを取り外すには、私が見つけた唯一の解決策でした。

私のシナリオは少し異なりました。

私はCORSが(信頼性の高いされていない*に設定する)私を呼んで、特定のホストに対してAccess-Control-Allow-Originに答える、Application_BeginRequestに設定しています。

私のコントローラは、応答としてCache-control: publicも設定します。私はCache-control: publicを設定するたびに、私は

を見つけた何

、IISは、強制的に応答をキャッシュします。 Application_BeginRequestまたは私のコントローラのブレークポイントは二度目にヒットしませんでした。

IISマネージャーを使用して出力とカーネルキャッシュを無効にすると、以下のが表示され、Application_BeginRequestのブレークポイントに遭遇しますが、私をコントローラーに入れたことはありません。何かがまだ応答をキャッシュしていました。 disabled output caching and kernel caching on inetmgr

This article IISからOutputCacheモジュールを削除することをお勧めします。

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <remove name="OutputCache" /> 
    </modules> 
</system.webServer> 

最後に私のコントローラにヒットすることができました。役立つだろう何

さらに

MSやないから、誰かがこの動作を変更する方法があるかどうか光を当てることができれば。 OutputCacheはアプリケーションのある部分では有用で、他の部分では不要です。

たぶん私は(私たちはしている?)ここで間違った問題を解決してい

を注意してください。

IISがこのシナリオでキャッシュを引き継ぐ可能性があります。おそらく、私のサーバーとユーザーとの間の途中のプロキシは、まさにそのようなシナリオのような振る舞いをするでしょう。その場合、IIS上でこの問題を回避するのは間違っています。私はそれを理解しなければならないでしょうし、多分あなたもそうするべきです。

関連する問題