0

これにアプローチする最善の方法はわかりませんが、これが私のシナリオです。

クライアントからの ajax リクエストにデータを供給する ashx ハンドラーがあるとします。次のような簡単なもの:

public class Handler : IHttpHandler
{
    private List<MyObject> data;

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        data = GetData();
        string result;

        switch (context.Request.QueryString["requestType"])
        {
            case "case":
                result = Foo.Bar(data).GetJSON();
                break;

            // .. several more data conversitions / comparisions 
        }

        context.Response.Write(result);
    }

    public class MyObject
    {
        public int Id { get; set; }
        public string Data { get; set; }
    }
}

サービスに対してリクエストが行われるたびにリストが再構築されないように、MyObject のリストをキャッシュするにはどうすればよいですか? MyObject のリストが何千もの結果を取得し、それを約 1 分間キャッシュしておきたいとしましょう。context.Cache を利用できますか?

基本的; ハンドラーの出力をキャッシュしたくありません。その中に存在するデータを持つ単なるオブジェクト。

編集: 次の行に沿って何かを探しています:

data = (List<MyObject>) context.Cache["data"];

if (data == null || !data.Any())
{
    data = GetData();
    context.Cache.Insert("data", data, null, DateTime.Now.AddMinutes(1), System.Web.Caching.Cache.NoSlidingExpiration);
}
4

1 に答える 1

1

result次のように、HttpContext.Current.Cache に追加できます。

var requestType = context.Request.QueryString["requestType"];
HttpContext.Current.Cache[requestType] = result;
于 2013-01-12T20:28:07.227 に答える