IE кеширует результаты WCF - можно ли это как-то исправить? - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть служба WCF в приложении ASP.NET AJAX, которая возвращает json. Я использую MS AJAX и клиент PageRequesManager для запуска службы после каждого endRequest для любых частичных обновлений страницы. У пользователя есть форма, он обновляет данные и отправляет, и сервис должен получить последние данные. Когда я отлаживаю с помощью FF и FireBug, все работает как чемпион. Точно так, как я его кодировал, однако, когда я запускаю приложение в IE, удивление !!! Первоначальный вызов является текущим, но последующие вызовы не возвращали новые свежие данные. Я проверял, добавляя запись, а затем делая «.length» для объекта JSON. Он должен был увеличиться на 1. Я пытался сделать некоторую ограниченную отладку, используя IE Developer Toolbar и Fiddler {что я действительно пока не понимаю}, но я увидел кнопку на панели инструментов разработчика, чтобы очистить кеш браузера. Я дал ему шанс, и Kaboom! IE начинает работать так, как я и ожидал. Я сделал это один раз на своей локальной коробке разработчика, и это сработало, но как долго, кто знает? и что я могу сделать для пользователей этого приложения? Могу ли я заставить IE как-то «получить последнюю версию», если хотите? Это приложение, конечно, предназначено для запуска в IE. Большинство пользователей, к сожалению, даже не слышали о FireFox. У кого-нибудь была подобная проблема? Любые идеи были бы хорошы. Я не опубликовал никакого кода, потому что я не рядом с источником, и в основном его ABC простой ванильный JavaScript. Я пишу код, похожий на Javascript: The Good Parts by Crockford, если это хоть какой-то признак качества.

Спасибо за любые идеи, ~ ck в Сан-Диего

1 Ответ

3 голосов
/ 12 ноября 2009

Я полагаю, ваш метод использует WebGetAttribute для вашего метода обслуживания? Это соответствует HTTP-глаголу GET, который будет кэшироваться в соответствии с настройками браузера по умолчанию, если сервер не указал заголовки кэширования в ответе.

У вас есть два варианта:

  1. Если вы используете хостинг интегрированных служб ASP.NET (например, AspNetCompatibilityAttribute), вы можете использовать свойство HttpRequest::Cache , чтобы установить параметры кэширования для ответа, используя различные методы HttpCachePolicy.
  2. Если вы используете / хотите использовать «чистый» WCF, вы можете установить свойства ETag и / или LastModified на OutgoingWebResponseContext через WebOperationContext::Current::OutgoingResponse. Что еще более важно, вы можете добавить заголовок Cache-Control в коллекцию Headers .

Вот отличная статья , которая содержит все, что вам, вероятно, когда-либо понадобится о кэшировании HTTP, если вам это нужно.

...