【问题标题】:?How do we stop IE9 from always retrieving Out-of-Date Data from Cache??我们如何阻止 IE9 总是从缓存中检索过期数据?
【发布时间】:2023-03-09 11:12:02
【问题描述】:

我们的项目使用 Silverlight 4 和 Microsoft Pivot Viewer,这是一种在 Silverlight 中工作的数据呈现工具。

Microsoft Pivot Viewer 可以更轻松地以功能强大、信息丰富且有趣的方式与大量数据进行交互。 Microsoft Live Labs 试图退后一步,设计一种交互模型,以适应信息的复杂性和规模,而不是传统的 Web 结构。

我们应用程序中使用 Siliverlight 和 Microsoft Pivot Viewer 的模块存在很多缓存问题。

我们应用程序中使用 Siliverlight 和 Microsoft Pivot Viewer 的模块在运行时动态检索图像,以便在 Siliverlight 和 Microsoft Pivot Viewer 中将图像呈现给用户。

我们遇到的问题是 IE9 在 Siliverlight 和 Microsoft Pivot Viewer 中缓存图像。

IIS 上的 HTTP 响应标头配置为 Web 内容立即过期。

只要您添加任何 URL 参数(例如“?v1”或您的代码中动态生成的参数),客户端 除非明确设置过期日期,否则浏览器会关闭缓存。

我们在 Siliverlight 和 Microsoft Pivot Viewer Host ASPX 文件中尝试了以下操作:

    <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) 即使在 IIS 上的 HTTP 响应标头配置为 Web 内容立即过期后,用户的 IE9 仍会缓存。 2) 即使我们确保 Silverlight XAP url 附加了动态生成的参数,用户的 IE9 仍然会缓存。

有人可以提供一些关于我们应该如何解决问题的步骤吗?

【问题讨论】:

  • 您是否担心silverlight XAP 或silverlight 应用程序下载的图像的缓存?
  • 可能也有助于描述您在 IE9 中所做的事情,您是单击链接然后单击返回按钮吗?点击重新加载按钮?还是关闭浏览器再重新打开?
  • @MerickOWA 我的应用程序中的 Silverlight/Pivot 查看器模块将从存储库加载图像。随着用户向存储库添加内容,存储库会发生变化。在 IE9 中,Silverlight/Pivot 查看器模块无法获取来自存储库的最新版本,因为 IE9 从用户计算机上的缓存中获取它。 FireFox 和 Chrome 总是返回服务器,并正确获取最新数据。如何让 IE9 一直访问服务器? PS。我正在单击一个链接以访问托管我的 Silverlight/Pivot Viewer XAP 文件的 AXPX 页面。
  • 您是否还在 IIS 中将 .cxml 和图像标记为立即过期?使用 fiddler 之类的工具并检查 XAP 文件返回的标头以及返回到数据透视控件的 .cxml 和图像文件可能会有所帮助,以确保服务器让 IE9 知道它不应该缓存它们。

标签: silverlight iis caching internet-explorer-9 pivotviewer


【解决方案1】:

一个非常临时的修复 - 您只能在开发期间使用 - 是在网页上按 F12 以调出开发人员工具。然后从菜单中选择缓存 > 始终从服务器刷新。

我希望我知道如何更永久地解决此问题。

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 2012-08-18
    • 2010-09-09
    • 2017-06-13
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    相关资源
    最近更新 更多