2013-01-12 44 views
0

我不確定處理此問題的最佳方式,但這裏是我的場景。在.ashx處理程序中緩存對象

比方說,我有一個ashx處理程序,它將一些數據提供給來自客戶端的ajax請求。一些簡單的像:

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); 
} 

回答

1

您可以添加到result HttpContext.Current.Cache,這樣的事情:

var requestType = context.Request.QueryString["requestType"]; 
HttpContext.Current.Cache[requestType] = result;