在Silverlight相关技术论坛经常会看到Silverlight部署后,客户端无法更新本地XAP文件,每次只能通过手动清理浏览器缓存,客户端才能正常访问到最新版本的XAP文件。本文将介绍几种强制客户端更新Silverlight XAP的方法。
默认来说,当新版本的Silverlight应用发布时,浏览器缓存会查询本地是否已经存在同名XAP文件,并进行简单校验,如果存在并且验证相同,将忽略下载更新最新版本XAP文件。我们可以通过以下几种方式,强制浏览器更新下载XAP文件,
方法1. IIS设置方式
通过在设置IIS属性,强制XAP文件过期,使浏览器将重新下载XAP文件,步骤如下:
- 打开IIS管理器;
- 打开“默认网站”, 然后找到部署的Silverlight项目;
- 在“ClientBin”目录下找到XAP文件;
- 进入XAP属性页面,然后选择“HTTP Response Headers”;
- 在Actions栏,选择“Set Common Headers...";
- 选择”Expire Web Content - Immediately“, 然后保存设置。
这样设置后,每当页面刷新时将强制Web页面内容过期,立即重新下载最新的XAP文件到本地。
方法2,动态方式强制更新
所谓动态方式强制更新,其实每次部署时使用不同的XAP文件名,浏览器每次检测到不同的文件名,则将重新下载XAP文件。
这种方式有很多种实现方法,例如,可以手动添加一个XAP文件参数,也可以动态生成一个随机参数,或者根据不同版本号绑定到XAP文件名后等。
在下面实例代码中,根据部署的日期不同,将日期字符串作为XAP文件的参数,以此强制更新XAP文件,
代码修改静态代码”<param name="source" value="ClientBin/SilverlightApp.xap"/>“为动态代码,当项目不是在Debug模式下,则生成新的XAP文件路径。
width ="100%" height ="100%" >
<%
string orgSourceValue = @ " ClientBin/SilverlightApp.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" />
方法3, 本地自动生成版本号强制更新XAP文件
该方法由网友”菩提树下的杨过“提出,作者创建简单本地应用,使用本地应用生成不同的XAP文件名参数,其原理与方法2相同,实现方法不同。
详细请看教程 ”Silverlight:xap包(或本地缓存)下载版本更新的解决思路“。
如果您有更好的方法和建议,欢迎留言讨论。
推荐Silverlight 5书籍:
Beginning Silverlight 5 in C#, Silverlight5入门级书籍,该书详细介绍Silverlight 5开发基础,由浅入深的介绍Silverlight 5新功能。
适合Silverlight入门阅读。
22308706(一群) 超级群500人
37891947(二群) 超级群500人
100844510(三群) 高级群200人
32679922(四群) 超级群500人
23413513(五群) 高级群200人
32679955(六群) 超级群500人
88585140(八群) 超级群500人
128043302(九群 企业应用开发推荐群) 高级群200人
101364438(十群) 超级群500人
68435160(十一群 企业应用开发推荐群)超级群500人