如何强制Firefox不缓存或重新下载Silverlight XAP文件?

Ytt*_*ium 50 silverlight firefox

在使用Silverlight时,我注意到Firefox将缓存XAP文件,因此如果我进行更新,用户可能会使用过时的版本.有没有办法强制浏览器每次都重新下载XAP文件,或者只是在更新发布后才强迫它?或者Silverlight配置中是否有设置阻止浏览器完全缓存XAP文件?

谢谢,杰夫

Rom*_*ain 32

查询字符串工作正常,但我不会使用DateTime.Now,因为它强制用户每次都重新下载应用程序.相反,我们使用以下内容:

protected void Page_Load(object sender, EventArgs e)
{
    var versionNumber = Assembly.GetExecutingAssembly().GetName().Version.ToString();
    this.myApp.Source += "?" + versionNumber;
}
Run Code Online (Sandbox Code Playgroud)

这样,您所要做的就是增加AssemblyInfo.cs文件中的版本号.


And*_*ick 12

最简单的方法:

<param name="source" value="ClientBin/App.xap?<%= DateTime.Now.Ticks %>" />
Run Code Online (Sandbox Code Playgroud)

  • 取而代之的是获取xap文件的文件日期要好得多.然后用户不必每次都下载应用程序. (7认同)

Fla*_*cks 6

这就是我在php中所做的.您读取xap文件的日期/时间,并将其作为参数附加到下载链接.通过这种方式,浏览器将新文件版本视为新链接,因此不在其缓存中.

<?php $fdate = date("dHis",filemtime("MyApp.xap")) ?>

<param name="source" value="MyApp.xap?=<?php echo $fdate ?>"/>
Run Code Online (Sandbox Code Playgroud)

简单而且有效.此外,当没有下载更新时,浏览器会继续正确缓存.


con*_*r42 5

您可能会发现Web作者和网站管理员缓存教程很有帮助。本文档讨论了客户端和服务器之间进行交互的不同缓存(浏览器,代理,网关)以及如何控制缓存。

  • KevDog:如果按照Timothy Lee Russell在回答中所说的那样,清除Firefox的缓存可以解决此问题,那么这意味着Firefox(不是Silverlight插件)正像其他任何Web资源一样通过HTTP请求文件,并使用相同的规则对其进行缓存适用于所有内容。了解缓存规则可能会有所帮助。 (3认同)

JwJ*_*efy 5

对我来说,最好的答案来自Chris Cairns.我刚刚调整了一下,调用ToString和GetHashCode,为时间戳生成一个ID:

<param name="source" value="ClientBin/App.xap?<%= System.IO.File.GetLastWriteTime(Server.MapPath("ClientBin/App.xap")).ToString().GetHashCode()%>" />
Run Code Online (Sandbox Code Playgroud)

工作得很好!


Jar*_*ard 4

您可以发送 HTTP 标头以防止其缓存:

Cache-control: no-cache
Pragma: no-cache
Run Code Online (Sandbox Code Playgroud)

如何执行此操作取决于您所使用的网络服务器。

  • Timothy:您必须确保这些 HTTP 标头适用于 XAP 文件,而不是 HTML 页面。IIS 允许您配置每个文件夹的自定义标头:http://support.microsoft.com/kb/247404 (3认同)