Cache.Get始终返回null

时间:2012-07-09 18:41:35

标签: c# asp.net web-services

我正在尝试缓存数据并继续失败。正如您在下面的代码中看到的,我调用Web服务返回一个名为“categories”的数组。这个电话成功了,我收到了回复信息。在使用结果填充下拉列表后,我使用Insert将信息存储到缓存中。在页面刷新时(我想我应该说除了回发之外的任何内容),我检查缓存以查看信息是否存在。它永远不会。抓住我的头......

if (! IsPostBack)
{
    //See if the results have been cached.  With arrays and checking for null, you have to
    //check the array itself before its elements can be checked.
    string[] saveCatList = Cache.Get("Categories" + Session["sessionID"]) as string[];
    if (saveCatList == null || string.IsNullOrEmpty(saveCatList[0]))
    {
        WBDEMOReference.getcatlist_itemcategories[] categories;
        strResult = callWebServ.getcatlist(Session["sessionID"].ToString(),
                    out strResultText, out dNumOfCat, out categories);

        for (int i = 0; i < categories.Length; i++)
        {
            //ddCat is the ID number of the category drop down list
            ddCat.Items.Add(new ListItem(categories[i].categorydesc.ToString(),
                                         categories[i].categorynumber.ToString()));
        }

        //Store the array into cache. 'Cache.Remove' will remove the cache for that key
        Cache.Insert("Categories" + Session["sessionID"], categories, null,
            DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration);
    }
}

2 个答案:

答案 0 :(得分:3)

我认为sJhonny在评论中得到了它。您将categoriesWBDEMOReference.getcatlist_itemcategories数组)放入缓存中,但在将其取回时执行as string[]。类型与as关键字不匹配将导致null值。尝试将as string[]更改为as WBDEMOReference.getcatlist_itemcategories[]或添加一项检查,看看它是否存在,而不使用as string[]演员。

答案 1 :(得分:1)

看起来你使用的是在webcontext中没有使用的HttpContext Cache可以为null,因此建议将是HttpRuntime Cache。运行时缓存将始终在您的应用程序中可用,例如甚至在控制台应用程序中

即使是HttpContext也会使用HttpRuntime Cache,但在您的场景中看起来运行时缓存可能会起作用

我很乐意删除我的答案,如果有人纠正我的建议是错误的