惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
罗磊的独立博客
F
Fortinet All Blogs
T
Threatpost
Y
Y Combinator Blog
博客园_首页
美团技术团队
Security Latest
Security Latest
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
V
V2EX - 技术
The Cloudflare Blog
L
LINUX DO - 热门话题
博客园 - 司徒正美
Jina AI
Jina AI
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
The Hacker News
The Hacker News
P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Latest news
Latest news
NISL@THU
NISL@THU
Google DeepMind News
Google DeepMind News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
雷峰网
雷峰网
Application and Cybersecurity Blog
Application and Cybersecurity Blog
B
Blog RSS Feed
W
WeLiveSecurity
D
DataBreaches.Net
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
Know Your Adversary
Know Your Adversary
TaoSecurity Blog
TaoSecurity Blog
S
Securelist
Help Net Security
Help Net Security

博客园 - 紫色永恒

一段旅程的结束和另一端旅程的开始 Silverlight Client←→Server数据同步备忘代码 Expression Blend 5 Preview For Silverlight5 RC已发布 Siverlight5新功能/改进总结 [译]WCF RIA Services中的集合(2) [译]WCF RIA Services中的集合(1) Silverlight通过MVVM实现多语言实时切换(含源代码) Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service) 你应该知道的,那些未在Silverlight5Beta中出现的特性 记录来敦煌一周的情况 [ASP.NET MVC3]Chart的ActionResult扩展 如何将ASP.NET MVC2项目升级到MVC 3 RC Silverlight 4 GDR 1 更新 Silverlight奇技银巧6 - UserControl的继承 Silverlight 4 Training Kit更新 Silverlight4的DataGrid改进与Toolkit2010.4中的新玩意 Win03+IIS6部署.NetFramework4(ASP.NET4)的一点小经验 4.13 Silverlight4 Will Come Silverlight4RC的API汇总(文本文件)
Silverlight奇技银巧7 - 巧用文件生成时间强制客户端载入最新xap文件
紫色永恒 · 2011-01-07 · via 博客园 - 紫色永恒

    像大多数的项目一样,即使在将Silverlight应用程序交付后,我们仍会根据客户的需求进行相应修改并将xap文件发送给客户,客户经过测试后再部署到生产环境。

    这样经常会面临一个问题,客户更新xap后并未看到任何变化甚至由于我们wcf服务等相关文件的改动会让程序执行发生异常。这个原因倒是很明显--我们的xap文件被缓存了,当服务器上替换了新的xap文件时,本地并未重新从服务器上下载。这时候我们当然就要告知客户如何清理缓存等等,再碰到个电脑盲(大多情况下)更是苦不堪言。客户抱怨,项目经理哑巴吃黄连…

    那么有没有一种方法可以解决上面提到的问题呢?当然,且听分解。

    我们先看一段在html中签入Silverlight应用的标准代码示例

        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
          <param name="source" value="ClientBin/MefSample.xap"/>
          <param name="onError" value="onSilverlightError" />
          <param name="background" value="white" />
          <param name="minRuntimeVersion" value="4.0.50826.0" />
          <param name="autoUpgrade" value="true" />
          <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
               <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
          </a>
        </object>

    注意下面这行,我们就要从这里下手。

<param name="source" value="ClientBin/MefSample.xap"/>

    我们知道,要防止浏览器自动缓存文件,经常用的一个做法就是在要加载的文件名后面加入一个随机字符串(比如验证码的刷新),如Guid、DateTime.Now.Ticks一类。

    因此我们这里的思路就是通过判断xap文件的生成时间而决定是否重新载入xap包。

    最终View的全部代码如下:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
    width="100%" height="100%">
    @{
        string xapFile = "ClientBin/MefSample.xap";
        string xapPath = HttpContext.Current.Server.MapPath("\\") + xapFile;
        DateTime xapCreatedDate = System.IO.File.GetLastWriteTime(xapPath);
        xapFile += "?v=" + xapCreatedDate;
    }
    <param name="source" value="@xapFile" />
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="4.0.50826.0" />
    <param name="autoUpgrade" value="true" />
    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration: none">
        <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight"
            style="border-style: none" />
    </a>
</object>

注意,这里我是用ASP.NET MVC(Razor语法)承载xap,对WebForm或WebForm View同样适用,请自行更改。