浏览器缓存是个好东西,但是有些时候,我们却又不需要它们,比如当我们在开发silverlight应用程序的时候。当你向你的老板或者客户展示你最新修改的程序时,你会发现浏览者缓存给你带来了不好的感受,咦~~?&*…… 怎么和没修改之前没变化,老板和客户看到没变化,当然,你心里清楚,是浏览器缓存搞的鬼,导致没有下载最新的xap文件,但是客户和老板怎么想?这是多么令人尴尬的事情啊~

第一招:彻底根除“祸害”

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

 。

第二招:控制“祸害”源头

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

1 7 8 14 15 <?php16  //php代码17 header('Cache-Control: no-cache');18 header('Pragma: no-cache');19 header('Expires:'. gmdate(DATE_RFC1123, time()-1));20 ?>21 22 //C#代码23 //Response.AddHeader("Cache-Control", "no-cache");24 //Response.AddHeader("Pragma", "no-cache");25 //Response.Expires = -1;26 27 Response.Cache.SetCacheability(HttpCacheability.NoCache);28 Response.Cache.SetNoStore();29 Response.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;

DateTime xapCreationDate=System.IO.File.GetLastWriteTime(xappath);

param="";}

Response.Write(param);%>

至此,已经可以很好的解决了浏览器缓存带来的一些问题。 :)

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

java xap_阻止xap文件在浏览器中缓存相关推荐

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

    2019独角兽企业重金招聘Python工程师标准>>> 浏览器缓存是个好东西,但是有些时候,我们却又不需要它们,比如当我们在开发silverlight应用程序的时候.当你向你的老板或 ...

  2. Java后台实现pdf文件在浏览器中预览

    Java后台实现pdf文件在浏览器中预览 放在服务器的pdf文件不能通过完整路径访问,想要实现的效果是浏览器访问后台接口可以预览pdf文件,暂时是把pdf文件放在本地测试 通过输出流的方式将pdf文件 ...

  3. 11.4.2 在照片浏览器中缓存值

    11.4.2 在照片浏览器中缓存值 下面的示例,我们将写一个应用程序,找出指定文件夹中所有照片,并以列表形式显示:当用户选择一张照片,应用程序调整大小,在窗口中显示.(为了简便起见,我们不会允许用户调 ...

  4. java 下载文件大小_如何在浏览器中显示使用角度5下载的文件的文件大小?

    我使用答案中的代码在角度5中实现了文件下载: 我有一个spring boot后端,它发送一个http响应对象,它有文件字节数组作为主体和内容类型,内容配置和内容长度 . 我不得不允许暴露的 Heade ...

  5. Sublime Text 3 快捷实现文件在浏览器中打开

    Sublime Text 3代码编辑器   问题:Sublime Text 3编写文件无法使用快捷键在浏览器中查看? 解决方法一:通过Sublime Text 3安装View In Browser插件 ...

  6. java saf_在不支持的浏览器中替代IndexedDB? Safari / iOS Saf-Chrome

    Here is another similar polyfill you can try,但在我(尽管有限)的经验中,两种填充物都是错误/不完整的 . 他们在GitHub上也有很多关于报告问题的人的未 ...

  7. java 通过url下载文件到浏览器

    前端传来url地址与文件名,下载文件到浏览器 代码 (这里模拟,直接在代码里写了url,可以拼接在url后进行截取) 请求接口 @GetMapping("/findOperatorBarVO ...

  8. adobe reader java_请问,如何用JAVA读PDF文件在浏览器中显示,不需要在本地系统中安装Adobe Reader。求java代码...

    JAVA读PDF可以实现,重点是如何在网页中显示PDF文件,而且不需要安装AdobeReader.没有安装AdobeReader,在网页显示PDF文件时,浏览器会提示下载.请问如何在网页中显示PDF文 ...

  9. java web配置dll文件_JavaWeb项目中dll文件动态加载方法解析(详细步骤)

    相信很多做Java的朋友都有过用Java调用JNI实现调用C或C++方法的经历,那么Java Web中又如何实现DLL/SO文件的动态加载方法呢.今天就给大家带来一篇JAVA Web项目中DLL/SO ...

  10. linux浏览器不能播放音频文件夹,在html中插入音频文件在浏览器中播放音频文件的兼容性问题...

    下面谈谈本人在html中插入音频文件,经过我的本地测试总结的一些问题(播放mp3文件): 1. 问题:IE8上正常(通过media player插件来播放)但在IE6和IE7上不会播放 Firefox ...

最新文章

  1. POJ1094查分约束,判断关系是否唯一
  2. 立德树人与计算机教学案例,‘我的立德树人教育案例’”
  3. 学习office add-in
  4. js去掉第一个换行符_通过异步迭代简化Node.js流程
  5. 公钥与私钥 数字签名是什么?
  6. 姚聪 旷世_首款国产豪华品牌大型SUV,汉龙旷世品质气场100分! - 快讯
  7. 分布式对象存储解决方案
  8. android降低屏幕分辨率,让游戏更尽兴 手动调低Android手机屏幕分辨率
  9. java 使用xml生成word_java 根据word xml模板生成word
  10. 【小5聊】layui第三方插件-xm-select参数
  11. ps 简笔画效果制作
  12. View UI——页面右上角添加浮动按钮(设置、退出全屏、进入全屏)
  13. 【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络
  14. Azure Machine Learning Studio 实例 -- 预测xx年的食物工厂总数
  15. docker启动无法指定配置文件
  16. 万字讲解Apollo,全网Apollo资料整理和学习
  17. Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
  18. Vue3-pinia(状态管理)
  19. Microsoft Office 2010安装教程
  20. SVN客户端使用教程

热门文章

  1. java gwt_gwt中java与js的相互调用 | 学步园
  2. 华为ME909之4G模块的开发
  3. 冬瓜哥直播:小白一小时掌握机器学习底层原理
  4. 关于百度机器人搜索你网站的页面权限设置
  5. NetSuite导出CSV文件用Excel打开是乱码
  6. Activiti6.0(十二)子流程
  7. 干掉卫星、无人机?只用气球就能获取10厘米分辨率遥感影像
  8. 英语听力下载《走遍美国》
  9. 计算机内如何关闭wps云盘,WPS轻松去掉WPS网盘,你可以吗?
  10. 【Linux】 - Linux中查看命令文档的命令