バックエンドに承認とメニュー構造を組み合わせたシステムがあります。パフォーマンス上の理由から、フロントエンド クライアント (MVC rel 1.0 Web サイト、IIS 5.1 ローカル、IIS 6.0 サーバー、クラスターなし) では EntLib キャッシュが使用されます。
「Cache.Contains」が true を返すことがありますが、キャッシュの内容は NULL です。正しく入力したことは確かですが、ここで何が問題になる可能性がありますか?
編集: キャッシュを 1 分に設定し、cacheKey 'A_Key' を追加すると、CurrentCacheState を調べたときにキーが戻ってくることがわかります。2 分後に CurrentCacheState を表示すると、キーはまだそこにあります。'contains' を実行すると、true が返されます。'contains' を再度実行すると、cacheKey がなくなっています。同期の問題??
よろしく、 ミシェル
抜粋:
if (IntranetCaching.Cache.Contains(cacheKey))
{
menuItems = (List<BoMenuItem>)IntranetCaching.Cache[cacheKey];
}
else
{
using (AuthorizationServiceProxyHelper authorizationServiceProxyHelper = new AuthorizationServiceProxyHelper())
{
menuItems = authorizationServiceProxyHelper.Proxy.SelectMenuByUserAndApplication(APPNAME, userName, AuthorizationType.ENUM_LOGIN);
IntranetCaching.Add(cacheKey, menuItems);
}
}
そしてキャッシュヘルパー:
public static class IntranetCaching
{
public static ICacheManager Cache { get; private set; }
static IntranetCaching()
{
Cache = CacheFactory.GetCacheManager();
}
public static void Add(string key, object value)
{
Cache.Add(
key
, value
, CacheItemPriority.Normal
, null
, new Microsoft.Practices.EnterpriseLibrary.Caching.Expirations.AbsoluteTime(TimeSpan.FromMinutes(10)));
}
}