0

私はVS2012でasp.net Webフォームアプリケーションを開発しています。Web.Appを使用したプロジェクトが1つあり、1つのプロジェクトはクラスライブラリです。クラス ライブラリでは、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 を挿入: 2013 年 8 月 17 日 5:14:23 PM

10.8.2013 17:14:23: キー CACHE_MENU_USER_DEMO\Administrator が理由で削除されました: CacheItemRemovedReason.Removed

10.8.2013 17:14:23: アプリ終了。

これは、リクエストごとに繰り返されます。

IIS Express でアプリケーションを開始しようとしていましたが、サーバー (IIS7、Windows サーバー 2008 R2) でアプリケーションを開始しようとしましたが、それでも同じです...

キャッシュとglobal.asaxの何が問題なのですか? ありがとう

編集: *問題が解決しました。詳細は FlopScientist からのコメントにあります*

4

0 に答える 0