2013-03-04 3 views
0

Мы хотим улучшить производительность нашей службы WCF, внедрив кэширование вывода.Зависимость кеша SQL: время отклика конкретного опроса

Для каждого URL-адреса (varyByParam="none" varyByCustom="RawUrl") мы хотим кэшировать результат, если таблица базы данных FooBar не изменилась.

Однако мы хотим проверить такое изменение только один раз в день (6:20 утра). Если таблица меняется в течение дня, мы не хотим, чтобы кэш был очищен до следующего дня 6:20.

Мы знаем, что это может привести к несогласованным выходам, однако в нашем сценарии применения это не проблема.

Как сообщить outputCache, чтобы проверить изменения только в 6:20 AM каждый день?

ответ

1

Я думаю, вы можете использовать метод Response.Cache.SetExpires, как описано в How to: Cache Versions of a Page Using Parameters.

Код будет что-то вроде:

var tomorrow = DateTime.Today.AddDays(1); 
Response.Cache.SetExpires(new DateTime(tomorrow.Year, tomorrow.Month, tomorrow.Day, 6, 20, 0, DateTimeKind.Local) 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Cache.SetValidUntilExpires(true); 
Response.Cache.SetVaryByCustom("RawUrl") 
+0

Извините за мой поздний ответ: Возможно ли это также в конфигурационном файле Web.config? –

+0

@ D.R. В общем случае ответ «да, можно настроить кеширование клиентов с помощью web.config» (посмотрите на этот вопрос http://stackoverflow.com/questions/2195266/how-to-configure-static-content-cache-per- folder-and-extension-in-iis7), но я не вижу, как реализовать проверку «check for changes» только в 6:20 AM каждый день »с помощью web.config. В качестве альтернативы вы можете создать статический класс, который будет иметь метод с входным параметром «Cache», и в этом методе вы можете централизовать конфигурацию кеширования. –

0

Установите пула приложений IIS для сброса в 6:20 утра каждый день, вместо того чтобы сделать это кодовое решение.

Некоторые браузеры будут игнорировать заголовки HTTP-кэша, как указано выше.

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

  • Нет связанных вопросов^_^