代码改变世界

强制客户端更新Silverlight XAP文件方法汇总

2012-07-17 12:02  jv9  阅读(2416)  评论(2编辑  收藏

 

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文件路径。

复制代码
<object id="Xaml1" data="data:application/x-silverlight-2," type="application/x-silverlight-2"
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入门阅读。

书籍下载

 


欢迎大家加入“专注Silverlight”QQ技术群,欢迎大家加入一起学习讨论Silverlight&WPF&Widnows Phone开发技术。 
22308706(一群) 超级群500人 
37891947(二群) 超级群500人 
100844510(三群) 高级群200人 
32679922(四群) 超级群500人 
23413513(五群) 高级群200人 
32679955(六群) 超级群500人 
88585140(八群) 超级群500人 
128043302(九群 企业应用开发推荐群) 高级群200人 
101364438(十群) 超级群500人 
68435160(十一群 企业应用开发推荐群)超级群500人