2009-04-13 16 views
5

おはようございます!イメージを出力するASPX出力キャッシュ可能?

いくつかのパラメータに基づいてリモートイメージを返すAPSX Webフォームを作成しました。

<img src="/ImageGetter.aspx?param1=abc&param2=123" /> 

ImageGetter.aspxのマークアップとコードは次のようになり:

<%@ OutputCache Duration="100000" VaryByParam="*" Location="ServerAndClient" %> 
<%@ Page Language="C#" AutoEventWireup="false" EnableSessionState="False" CodeBehind="ImageGetter.aspx.cs" Inherits="ACME.Helpers.ImageGetter" %> 

このコードはImageGetter.aspxのPage_Loadメソッドで呼び出されます。

byte[] data = null; 
Dictionary<string, string> file_locations = GetImageLocations(param1, param2); 
try 
{ 
    data = new WebClient().DownloadData(file_locations["main"]); 
} 
catch (WebException wex) 
{ 
    try 
    { 
     data = new WebClient().DownloadData(file_locations["backup"]); 
    } 
    catch (Exception e) 
    { 
     throw; 
    } 
} 
Response.ContentType = "image/jpeg"; 
Response.OutputStream.Write(data, 0, data.Length); 
Response.End(); 

それはこのように使用することができます私のテストでは、キャッシュされているようには見えません。これはOutput Cachingで行うことができますか?または、クエリ文字列パラメータに応じてバイト配列を格納するために私自身のキャッシュを作成する必要がありますか?

答えて

10

Response.End()を削除すると、スレッドが途中で終了し、出力キャッシュが行われなくなります。

参照:http://bytes.com/groups/net-asp/323363-cache-varybyparam-doesnt-work

あなた ASHXハンドラを使用して、独自のキャッシュ方法の使用を検討することを望むかもしれません。

+0

ドロップResponse.Endのを何とかなおさらそれを遅くなります。 – Bullines

+3

...今はキャッシュフープを飛び越しているからですか? – Codebrain

2

CodeBrainによると、ASHXジェネリックハンドラを使用し、HttpRuntimeCache(Cacheオブジェクト)を使用してジョブを実行します。それはより速く、より柔軟になります。

0

bug in IE - HTTP応答ヘッダーがVary:*の場合はキャッシュできませんが、HTTP 1.1仕様であるため、IISはデフォルトで応答を返します。あなたのweb.configファイルに以下を追加し

試してみてください。

<system.web> 
    <caching> 
     <outputCache omitVaryStar="true" /> 
    </caching> 
</system.web> 
関連する問題