dada2010 Ответов: 0

Кэширование через 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 вместо этого, он будет работать?

0 Ответов