Кэширование через system.web.httpruntime.cache с зависимостью от файла не обновляется
Всем привет
у меня есть проблемы с некоторым кодом :
Я пытаюсь кэшировать некоторое значение из конфигурационного файла в global.asax с помощью таймера.
Глобальная цель проекта-проверять некоторые данные и push-сообщения для всех веб-пользователей (через SignalR) каждые 20 секунд.
я добавляю зависимость от файла, но при обновлении этого файла кэш не обновляется. я добавляю абсолютное дыхание, которое хорошо работает.
в Application_Start of global.asax я инициализирую таймер приложения:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); BundleConfig.RegisterBundles(BundleTable.Bundles); RouteTable.Routes.MapHubs(); RouteConfig.RegisterRoutes(RouteTable.Routes); var aTimer = new System.Timers.Timer(1000); aTimer.Elapsed += aTimer_Elapsed; aTimer.Interval = 20000; aTimer.Enabled = true; }
таймер тикает каждые 20 секунд (работает) :
void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //occur++; double currNPM = getCurrentnParMinute(999); //UserActivityHub.TimerisTicked(occur); }
моя основная функция : возврат двойника, найденного в конфигурационном файле, или в кэше (который обновляется каждые 1 минуту (ОК), или когда файл обновляется (не ок))
public double getCurrentnParMinute(int idstructure) { try { string cacheName = "getCurrentnParMinute." + idstructure; if (System.Web.HttpRuntime.Cache[cacheName] == null) { string pathConfig = "c:\myconfig.xml"; XmlDocument xmlconfig = new XmlDocument(); xmlconfig.Load(pathConfig); double toreturn = 123; /* not real code here, in real i extract this value from pathConfig.file (working) */ //CacheDependency dep = //System.Web.HttpContext.Current.Cache.Insert(cacheName, toreturn, dep); /* not working in global.asax */ System.Web.HttpRuntime.Cache.Insert(cacheName, toreturn, new CacheDependency(pathConfig), /* that's NOT ok*/ DateTime.Now.AddMinutes(1), /* that's ok*/ System.Web.Caching.Cache.NoSlidingExpiration); return toreturn; } else return (double)System.Web.HttpRuntime.Cache[cacheName]; } catch (Exception ex) { return 0; } }
я часто использовал эту систему без каких-либо проблем на разных веб-сайтах, разница здесь в том, что мне нужно использовать System.Web.HttpRuntime.Кэша, а не из системы.Веб.Свойство HttpContext.Тока.Кэш, потому что (если я хорошо понимаю) System.Web.HttpContext.Current равен нулю в global.asax... Есть идеи, что я делаю не так ?
Что я уже пробовал:
попытался обновить файл, чтобы обновить кэш, но безуспешно
F-ES Sitecore
Есть ли у вашего кода доступ к этому файлу? Если вы поместите его в ~/App_Data вместо этого, он будет работать?