?Как сделать так, чтобы IE9 не всегда извлекал устаревшие данные из кэша?

В нашем проекте используется Silverlight 4 и Microsoft Pivot Viewer, инструмент представления данных, работающий в Silverlight.

Microsoft Pivot Viewer упрощает взаимодействие с огромными объемами данных, делая их эффективными, информативными и увлекательными. Microsoft Live Labs попыталась сделать шаг назад и разработать модель взаимодействия, которая учитывала бы сложность и масштаб информации, а не традиционную структуру Интернета.

Модуль в нашем приложении, который использует Siliverlight и Microsoft Pivot Viewer, имеет довольно много проблем с кэшированием.

Модуль в нашем приложении, использующий Siliverlight и Microsoft Pivot Viewer, динамически извлекает изображения во время выполнения, чтобы представить изображения пользователю в Siliverlight и Microsoft Pivot Viewer.

Проблема в том, что IE9 кэширует изображения в Siliverlight и Microsoft Pivot Viewer.

Заголовки ответов HTTP в IIS настроены таким образом, что срок действия веб-содержимого истекает немедленно. Настройка заголовков ответа HTTP для папки ClientBin, содержащей Silverlight XAP

Как только вы добавляете какой-либо параметр URL-адреса (например, «?v1» или динамически сгенерированный параметр, как в вашем коде), кэширование на стороне клиента отключается браузером, если только дата истечения срока действия не установлена ​​явно.

Мы попробовали следующее в ASPX-файле Siliverlight и Microsoft Pivot Viewer Host:

    <div id="silverlightControlHost">
    <object id="pivotViewer" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="900">   
<%
    HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
    HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
    HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.Cache.SetNoStore();
    string orgSourceValue = @"ClientBin/SilverlightPivotViewer.xap";

string param;

if (System.Diagnostics.Debugger.IsAttached)

param = "<param name=\"source\" value=\"" + orgSourceValue + "\" />";

else

{

string xappath = HttpContext.Current.Server.MapPath(@"") + @"\" +     orgSourceValue;

DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath);

param = "<param name=\"source\" value=\"" + orgSourceValue + "?ignore="

+ xapCreationDate.ToString() + "\" />";

}

Response.Write(param);

%>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.50401.0" />
      <param name="autoUpgrade" value="true" />

      <param name="initParams" value="cxml=Resources.cxml" />

      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>

Google Chrome и Mozilla Firefox работают нормально. Однако IE9 дает сбой, потому что он продолжает получать устаревшие данные из кэша для Silverlight.

Наши следующие усилия не смогли решить проблему кэширования:

1) IE9 пользователя по-прежнему кэшируется даже после того, как заголовки ответов HTTP в IIS настроены таким образом, что срок действия веб-контента истекает немедленно. 2) IE9 пользователя по-прежнему кэшируется даже после того, как мы обеспечим добавление URL-адреса Silverlight XAP с динамически генерируемым параметром.

Может ли кто-нибудь указать некоторые шаги относительно того, как мы должны решить проблему?


person user1338998    schedule 17.05.2012    source источник
comment
Вас беспокоит кэширование XAP Silverlight или изображений, загружаемых приложением Silverlight?   -  person MerickOWA    schedule 18.05.2012
comment
Также может быть полезно описать, что вы делаете в IE9, вы нажимаете ссылку, а затем нажимаете кнопку «Назад»? нажать кнопку перезагрузки? или закрыть браузер и снова открыть его?   -  person MerickOWA    schedule 18.05.2012
comment
@MerickOWA Модуль Silverlight/Pivot Viewer в моем приложении будет загружать изображения из репозитория. Репозиторий изменяется по мере того, как пользователи добавляют контент в репозиторий. его из кэша на компьютере пользователя. FireFox и Chrome всегда возвращаются к серверу и правильно получают последние данные. Как заставить IE9 постоянно обращаться к серверу? PS. Я нажимаю на ссылку, чтобы перейти на страницу AXPX, на которой размещен мой XAP-файл Silverlight/Pivot Viewer.   -  person user1338998    schedule 18.05.2012
comment
Вы также пометили .cxml и изображения для немедленного истечения срока действия в IIS? Может быть полезно использовать такой инструмент, как fiddler, и проверять заголовки, возвращаемые файлом XAP, а также файлы .cxml и изображения, возвращаемые в элемент управления Pivot, чтобы убедиться, что сервер сообщает IE9, что он не должен их кэшировать.   -  person MerickOWA    schedule 18.05.2012


Ответы (1)


Очень временное исправление, которое вы можете использовать только во время разработки, — это нажать F12 на веб-странице, чтобы открыть инструменты разработчика. Затем в меню выберите «Кэш» > «Всегда обновлять с сервера».

Хотел бы я знать, как исправить это навсегда.

person Martin McGirk    schedule 17.05.2012