0

我们的项目使用 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 内容立即过期。 包含 Silverlight XAP 的 ClientBin 文件夹的 HTTP 响应标头设置

只要您添加任何 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 仍会缓存。

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

4

1 回答 1

0

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

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

于 2012-05-17T20:11:32.843 回答