一般咱们用html或asp.net页面承载Silverlight包,因为浏览器缓存机制的存在,使得你的应用更新时,客户见到每每是旧版的程序,而彻底禁止缓存,每次打开页面都要从新下载xap,对于体积较大的程序,这将使用户体验大打折扣!html
下面介绍一种可手动控制客户端是否刷新xap包的方法,既保证升级的时候客户端能同步更新,又可以使用缓存机制,加速程序加载速度:vim
1.站点的默认页采用aspx或jsp,而后转向另外一个真正承载xap的页面(能够是aspx,jsp或html), 下面以aspx为例,首页index.aspx代码以下浏览器
<%@ Page Language="C#" AutoEventWireup="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> </head> <body> <%Server.Transfer("root.html?"+DateTime.Now.ToString(),true);%> </body> </html>
2.root.html代码片断缓存
<form id="form1" runat="server" style="height:100%"> <div id="silverlightControlHost"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <param name="source" value="ClientBin/Sample.xap?4"/> <param name="onError" value="onSilverlightError" /> <param name="background" value="white" /> <param name="minRuntimeVersion" value="5.0.61118.0" /> <param name="autoUpgrade" value="true" /> <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.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> </form>
方法的核心是采用动态首页转向不被缓存的承载页面,只有保证承载页面不被缓存,那么你手动更改Sample.xap?XXX参数的时候才会生效;其次是每次升级的时候,对应手动修改Sample.xap?XXX的参数便可保证客户端浏览器会从新下载xap,又因为此参数是常量,可使得缓存机制生效!app
这里着重再强调下, 有人也许会问为何不直接将root.html设为首页?由于html页面自己也是会被缓存的,即便你把xap的参数改了,客户端缓存的也是旧版的html。固然首页也能够不用aspx,直接用html配合js随机函数也可实现跳转-----只是地址栏url会跟着变化,看上去很没有技术含量啊,呵呵。asp.net
参考:http://www.cnblogs.com/vimsk/archive/2011/04/09/2010812.htmljsp