У меня есть комбинированная система авторизации и меню на нашем бэкэнде.
Из соображений производительности в клиентском веб-интерфейсе используется кэширование EntLib (веб-сайт MVC rel 1.0, локальный IIS 5.1, сервер IIS 6.0, без кластера).
Иногда Cache.Contains возвращает true, но содержимое кэша равно NULL. Я точно знаю, что заполнил правильно, так в чем тут проблема?
РЕДАКТИРОВАТЬ: когда я установлю кэш на 1 минуту и добавлю cacheKey 'A_Key', я увижу ключ, возвращающийся при проверке CurrentCacheState. Когда я просматриваю CurrentCacheState через 2 минуты, ключ все еще там. Когда я выполняю «содержит», возвращается true. Когда я снова выполню «Содержимое», cacheKey исчезнет!
Проблема синхронизации ??
С уважением,
Michel
Выдержка:
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)));
}
}