2012-03-06 2 views
0

Я пытаюсь сделать веб-сервис, который кэширует его выходное содержимое.Веб-сервис - обновление кеша

Я добавил [WebMethod(CacheDuration=1800)], но проблема в том, что я хочу, чтобы веб-служба автоматически обновляла свой кеш после 30 минут без каких-либо запросов.

Я использую .net с C#. веб-служба фактически является прокси-сервером, который получает XML-данные, анализирует его и отправляет клиенту.

Как веб-служба может обновить свой кеш через некоторый период времени (отдельно)?

+1

У вас есть вопросы? – Oded

+0

Да. Как веб-служба может обновить свой кеш через некоторый период времени (сама по себе)? – user1226051

+0

Зачем кешировать 30 минут в этом случае? Кэш за день. – Oded

ответ

0

Вы можете использовать один из timer classes для обновления кэшированного набора результатов - сохранение его в поле класса.

Таким образом вы можете управлять кешем вместо IIS.

Альтернатива таймеров использовать Cache класса - с помощью CacheItemUpdateCallback для автоматического обновления кэша, когда он истекает (по-прежнему оставляет небольшое окно, в котором пользователь может вызвать метод , как освежает - возможно использовать два элементы кэша).

+0

В соответствии с вашей ссылкой, я думаю, вы не можете использовать «System.Windows.Forms.Timer» в Интернете. Я попробовал класс «System.Timers.Timer» и использовал событие «Истекшее», но он применил noy к обработчику. Я использовал приведенный ниже код. 'System.Timers.Timer t = новый System.Timers.Timer(); t.Enabled = true; t.Interval = 5000; t.Elapsed + = новый System.Timers.ElapsedEventHandler (t_Elapsed) аннулирует t_Elapsed (объект отправителя, System.Timers.ElapsedEventArgs е) { } ' – Pankaj

+0

моя первая идея была использовать новый поток, который спит в течение некоторого времени , затем начинает выполнение (обновляет кеш), а затем снова спит. Тем не менее, так же просто, как кажется, его кошмар для реализации. Все ресурсы, которые совместно используются в течение интервала обновления, должны быть заблокированы, чтобы их можно было обновить. любые предложения по этому поводу? – user1226051

+0

Я не уверен, но я думаю, вам нужно t.start() ... – user1226051

Смежные вопросы