Там какой-либо путь состоит в том, чтобы вынудить WebClient, не возвращают кэшированные данные?

Я получаю изображения из каталога веб-сервера как это:

        WebClient webClientImgDownloader = new WebClient();
        webClientImgDownloader.OpenReadCompleted += new OpenReadCompletedEventHandler(webClientImgDownloader_OpenReadCompleted);
        if(uriIndex < uris.Count())
            webClientImgDownloader.OpenReadAsync(new Uri(uris[uriIndex], UriKind.Absolute));

Но я заметил, удаляю ли я изображение, Silverlight продолжает получать изображение, как будто это было там.

Когда я затем ввожу URL изображения в FireFox, я вижу изображение также, но затем я нажимаю Reload и это дает мне соответствующую ошибку, что изображение не существует. Затем, когда я запускаю свое приложение Silverlight снова, оно также соответственно дает мне ошибку, что изображение не существует, как будто браузер очистил флаг кэша где-нибудь.

Как я могу затем сделать "обновление" через WebClient в коде, так, чтобы, если изображение внезапно не существует на сервере, Silverlight не продолжала давать мне кэшируемую копию его?

9
задан John Conde 4 October 2012 в 13:05
поделиться

2 ответа

Это сложный вопрос, поскольку кэширование обычно вызвано тем, что в заголовках сайта не указано no-cache. Я обнаружил, что в прошлом самым простым способом решения этих проблем с кэшированием было просто предоставить случайные параметры строки запроса, чтобы веб-сервер интерпретировал каждый запрос как новый.

если вы сейчас запрашиваете www.domain.com/image.jpg, попробуйте www.domain.com/image.jpg?rand=XXXX, где XXXX - случайное значение, сгенерированное в вашем коде на стороне сервера.

7
ответ дан 4 December 2019 в 20:23
поделиться

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

Если вы должны убедиться, что при отправке запроса отображается самое последнее состояние, убедитесь, что сервер правильно настроил заголовки ответа. В этом случае убедитесь, что у вас есть заголовок Cache-Control: max-age = 0 , указанный на изображении (или, что более вероятно, на папке, содержащей набор изображений).

Установив max-age = 0, вы заставите браузер пытаться повторно загрузить изображение, однако он сообщит серверу о любой существующей версии изображения, которая находится в кеше. Это дает серверу возможность отправить статус 404, потому что изображение было удалено, 304, потому что изображение все еще существует и не изменилось, поэтому можно использовать кешированную версию или 200, потому что изображение было изменено, этот последний ответ будет содержать новая версия.

4
ответ дан 4 December 2019 в 20:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: