? Как мы не дадим 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:

    <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 добавляется динамически генерируемый параметр.

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

1 ответ

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

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

Другие вопросы по тегам