我们的项目使用 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 仍会缓存。
有人可以提供一些关于我们应该如何解决问题的步骤吗?