0

我在 VS2012 中开发 asp.net Web 表单应用程序,我有一个 Web.App 项目,一个项目是类库。在一个类库中,我从 web.config 读取配置(在一个项目中有很多应用程序设置,如菜单文件、日志文件等的路径),在这个程序集中,我有一个用于缓存和记录事件到文件的类。

这是缓存类的一部分:

public static class MyCache
{
    public const String CACHE_MENU_USER = "CACHE_MENU_USER_{0}";
    public const String CACHE_LOG_FILE_PATH = "LOG_FILE_PATH";
    public static void AddToCache(String cacheKey, Object value, DateTime absoluteExpiration, bool loggToFile = true)
    {

        HttpContext.Current.Cache.Add(cacheKey,
                                      value,
                                      null,
                                      absoluteExpiration,
                                      Cache.NoSlidingExpiration,
                                      CacheItemPriority.High,
                                      (k, v, r) => //key, value, reason of remove from cache
                                      {
                                          String reasonOfRemove = String.Empty;
                                          switch (r)
                                          {
                                              case CacheItemRemovedReason.DependencyChanged:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.DependencyChanged");
                                                  break;

                                              case CacheItemRemovedReason.Expired:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Expired");
                                                  break;

                                              case CacheItemRemovedReason.Removed:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Removed");
                                                  break;

                                              case CacheItemRemovedReason.Underused:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Underused");
                                                  break;
                                          }

                                          AppConfiguration.Logger.WriteMessage(String.Format("Key {0} was removed for reason: {1}", cacheKey, reasonOfRemove));
                                      });

        if (loggToFile)
            AppConfiguration.Logger.WriteMessage(String.Format("Insert cache key {0} from now to: {1}", cacheKey, absoluteExpiration));
    }
}

AppConfiguration 是具有静态属性的静态类,其值来自 web.config。Logger 是 Logger 类的一个实例。

在 global.asax 中有一段代码:

protected void Application_Start(object sender, EventArgs e)
    {
        AppConfiguration.ReadConfiguration();
        AppConfiguration.Logger.WriteMessage("Start app");
    }
    protected void Application_End(object sender, EventArgs e)
    {
        AppConfiguration.Logger.WriteMessage("End app");
    }

问题是,每次请求都会调用 App_Start 插入的缓存值会立即被删除......

这是日志文件的一部分:

10.8.2013 17:14:22:启动应用程序。

10.8.2013 17:14:23:插入缓存键 CACHE_MENU_USER_DEMO\Administrator 从现在到:8/17/2013 5:14:23 PM

10.8.2013 17:14:23:密钥 CACHE_MENU_USER_DEMO\Administrator 被删除,原因是:CacheItemRemovedReason.Removed

10.8.2013 17:14:23:结束应用程序。

a 每次请求都会重复此操作。

我正在尝试在 IIS Express 中启动应用程序,我正在尝试在服务器(IIS7、Windows server 2008 R2)中启动应用程序,但它仍然是一样的......

知道缓存和 global.asax 有什么问题吗?谢谢

编辑: *问题解决了。更多来自 FlopScientist 的评论*

4

0 回答 0