Кэшировать объект в обработчике .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);
}

person mikeds    schedule 12.01.2013    source источник


Ответы (1)


Вы можете добавить result в HttpContext.Current.Cache, примерно так:

var requestType = context.Request.QueryString["requestType"];
HttpContext.Current.Cache[requestType] = result;
person Antonio Bakula    schedule 12.01.2013