私は、私たちのバックエンドに統合された承認システムとメンテナンスシステムを持っています。 パフォーマンス上の理由から、EntLibキャッシュはフロントエンドクライアント(MVC rel 1.0 Webサイト、IIS 5.1ローカル、IIS 6.0サーバー、クラスタなし)で使用されます。Entlib Cache.Contains NULLの問題
時には 'Cache.Contains'はtrueを返しますが、キャッシュの内容はNULLです。私はそれを正しく記入していることを確かに知っているので、ここで何が問題になるのでしょうか?
EDIT:キャッシュを1分に設定し、cacheKey 'A_Key'を追加すると、CurrentCacheStateを検査するときにキーが戻ってくるのがわかります。 CurrentCacheStateを2分後に見ると、キーはまだそこにあります。 '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);
}
}
そしてcachehelper:
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)));
}
}