Кеширует ли Silverlight вызовы веб-службы? - PullRequest
1 голос
/ 04 октября 2010

Вот проблема:

Мое приложение Silverlight вызывает веб-службу HTTP, используя WebClient, который называется getCampaigns, который возвращает массив данных JSON для объектов Campaign. Затем пользователь может взаимодействовать с запрошенными объектами, изменять их, удалять их и т. Д. Когда пользователь удаляет кампанию, Silverlight вызывает другую веб-службу, которая помечает объект в базе данных, чтобы он не был возвращен в будущем, и затем обновляет страницу, вызывая getCampaigns. Проблема в том, что удаленная кампания все еще появляется.

Если я проверю базу данных, кампания действительно будет отключена, и если я закрою приложение Silverlight и перезапущу его, кампания не появится. Похоже, что Silverlight кэширует вызов веб-службы. Но каждый раз, когда выполняется вызов, создается новый объект WebClient.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 08 июня 2011

Любые запросы HTTP GET в Silverlight имеют тенденцию кешироваться, поэтому, если вы хотите устранить кеширование клиентским браузером, используйте HTTP POST для выполнения вызовов веб-службы.Например, в WCF RIA Domain Services пометьте методы вызова и запроса следующим образом:

[Invoke(HasSideEffects = true)]
[Query(HasSideEffects = true)]

HasSideEffects просто заявляет, что ему следует использовать метод POST, чтобы избежать механизма кэширования клиентского GET.Помните, что SL по умолчанию использует браузер для вызовов веб-сервисов и по умолчанию использует GET, который кешируется.Вот почему ваши веб-сервисы обращаются к сервисам, даже вне RIA, кэшируются: браузер видит, что вы используете HTTP GET, и кэширует результат.

Использование GET по умолчанию для вызовов веб-сервисов по соображениям производительности, потому чтоОтветы POST не кэшируются всеми основными браузерами в соответствии с RFC 2616, в котором говорится, что POST должна быть идемпотентной операцией (или, как правило, всегда приводит к ожидаемому результату, который кешируется, потому что результат может со временем измениться).RIA включает настройку кэширования с помощью LoadBehavior в LoadOperations.

0 голосов
/ 23 октября 2010

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=340931&wa=wsignin1.0

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

0 голосов
/ 20 января 2011

Это старая ветка, но я перезвоню на всякий случай, если кто-то столкнется с той же проблемой.Обходной путь - если у вас есть доступ к браузеру пользователя, он должен обновлять кэш для каждого запроса страницы.Это можно сделать, зайдя в Свойства обозревателя IE (IE 8), затем на вкладке «Общие» перейдите к кнопке «Настройки просмотра истории» и выберите «Каждый раз, когда я захожу на веб-страницу». Надеюсь, это кому-нибудь поможет

0 голосов
/ 06 октября 2010

Нет кэша вызовов веб-сервисов.Возможно, у вас проблема с методом обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...