【发布时间】: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