资讯详情

阻止xap文件在浏览器中缓存

浏览器缓存是一件好事,但有时我们不需要它们,例如,当我们开发它们时silverlight应用程序的时候。当你向老板或客户展示你最新修改的程序时,你会发现浏览器缓存给你带来了不好的感觉,嘿~~?&*…… 如何在没有修改之前没有改变,老板和客户看到没有改变,当然,你知道,是浏览器缓存鬼,导致没有下载最新的xap但是客户和老板怎么想呢?这是多么尴尬啊~

第一步:彻底根除祸害

怎么办?很简单,每次手动清理浏览器缓存,清除当地临时文件@#&~~其实我以前也这样做过。

86d520ac5af599ee8659459e21c8bfe1.gif

第二招:控制祸害源头

通过控制Http添加以下相关代码,防止浏览器缓存:

1781415<?php16 //php代码17header('Cache-Control:no-cache');18header('Pragma:no-cache');19header('Expires:'.gmdate(DATE_RFC1123,time()-1));20?>2122//C#代码23//Response.AddHeader("Cache-Control","no-cache");24//Response.AddHeader("Pragma","no-cache");25//Response.Expires=-1;2627Response.Cache.SetCacheability(HttpCacheability.NoCache);28Response.Cache.SetNoStore();29Response.Cache.SetExpires(DateTime.MinValue);

关于控制浏览器缓存,请查看更详细信息

http://support.microsoft.com/kb/247404

但结果是什么呢?它会阻止整个页面的缓存,有时我们只是silverlight应用程序作为页面的一部分嵌入,所以我们只是想silverlight限制缓存。所以,第三步。

第三招:直捣黄龙

限制我们的目标是silverlight的缓存,而silverlight事实上,它在运行过程中会被加载xap事实上,归根结底,浏览器是正确的xap缓存文件,以确保每次下载xap文件而不是缓存xap文件,给xap在文件地址上添加一个随机参数,如下图:

1"/>

当然,你可以使用其他方法来获得随机数。但这样做会让你随时下载新的xap文件,那么相当于关闭的缓存功能,但是我现在只是想在调式的情况下不使用缓存,在发布后使用缓存,于是,我们可以改进下:

{

param="";

}else{

param="";

}

Response.Write(param);%>

我们动态构建下载源,使用条件判断句,使用具有随机参数的地址在调式模式下,而不改变。

首先,在调式模式下查看操作程序,然后查看源文件,查看:

看非调模式地址:

可以看出,在非标准模式下,仍然使用无参数地址。到目前为止,我们已经解决了我们一开始提出的问题,现在,还有另一种情况,即当您的程序部署在服务器上时,如何确保发布的应用程序是最新的,而不是缓存。为了解决这个问题,当然,第三步中的第一种方法是:

1"/>

然而,这相当于取消了缓存功能,那么缓存的价值是什么呢?每次下载最近修改的更好的方法应该是xap文件。

通过检查xap文件的创建时间决定是否使用缓存。如果创建时间发生变化,将下载最新修改的文件。如果时间没有变化,将使用最后一个缓存文件:

param="";else{stringxappath=HttpContext.Current.Server.MapPath(@"") @"\" strSourceFile;

DateTimexapCreationDate=System.IO.File.GetLastWriteTime(xappath);

param="";}

Response.Write(param);%>

到目前为止,浏览器缓存带来的一些问题已经得到了很好的解决。 :)

参考文章:http://codeblog.larsholm.net/2010/02/avoid-incorrect-caching-of-silverlight-xap-file/#comment-20

标签: an6xap6xrn6x传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台