Хорошо, у меня есть довольно сложное приложение silverlight, которое получает свои данные от службы WCF (слой размещенного сервиса asp.net), которое, в свою очередь, вызывает уровень данных, который вызывает хранимые процедуры в БД SQL 2005 для извлечения необходимых данных , Таким образом, поездка туда и обратно выглядит так:
Приложение Silverlight -> Служба WCF -> Уровень данных -> БД -> Уровень данных -> Служба WCF преобразует объект данных в соответствующий DTO (объект передачи данных) или его список <> -> Приложение Silverlight
Большая часть данных является высокореляционной (поэтому она должна существовать в БД), но она будет меняться нечасто. Кажется, у меня есть несколько вариантов расположения, чтобы кэшировать эти «полупостоянные» данные:
- Я могу кешировать его в слое данных. Мой уровень данных уже настроен для использования класса SQLDependency и кэширования результатов от вызова хранимой процедуры. Я думаю, что это или может быть кеш уровня приложения.
- Я могу кэшировать результирующий DTO в кеше уровня приложения (или уровне сеанса в зависимости от вызова) внутри самой службы WCF.
2 (а) Я мог бы даже сделать этот шаг дальше, сериализовав XML для результирующих DTO в файл на стороне службы WCF, чтобы я мог (а) проверить кэш памяти, затем (б) проверить кэш файлов и (c) ударить слой данных
- Я мог бы сделать что-то похожее на 2 (а) с изолированным хранилищем на стороне клиента в приложении SL. Я мог бы сериализовать данные в локальное изолированное хранилище с помощью хэша (или моддата или чего-то еще), а затем просто позвонить, чтобы проверить это.
Еще одна вещь, которую нужно добавить: я размещаю эту службу WCF в IIS7 с включенным динамическим сжатием, чтобы (часто очень большой и легко сжимаемый) XML-ответ получал gzip-ed. В идеале, казалось бы, я хотел бы, чтобы IIS кешировал этот gzip-ed результат, чтобы избежать всей дополнительной обработки. Я думаю, что это может сделать это уже, но я не уверен.
Я почти уверен, что окончательный ответ на этот вопрос - это какая-то разновидность "это зависит", но я хотел бы услышать, как другие приближаются к этому. Хороший тактический рецепт Do X, Test Performance с инструментом Y, было бы здорово иметь do Z.
Несколько ссылок (я добавлю к этому, когда буду исследовать это):
Подход кэширования WCF