对于小型的Silverlight应用程序,可以把所有内容,包括资源,都包含在一个Xap包中发布。对于开发者来说,是个很便利的选择,可以把更多的精力和时间用到程序的功能方面,提高开发效率。但是对于使用者来说,如果xap文件过大,需要下载几分钟或者更长时间才能看到实际效果,可能是一个很糟糕的用户体验,一定需要很大的勇气和决心才会再次访问。为了解决初始下载主包时间太长的问题,开发者一般会把比较大的音频,视频和图片等资源从主包中剥离出来,使用动态下载方式。而无论是那种动态下载技术,WebClient类都扮演着十分重要的角色。我们需要深刻的认识和理解WebClient,才能更好的决定动态下载技术和策略。这一节作者首先介绍和剖析WebClient类。

首先看看官方的在线帮助,是最权威的解释。用于上传服务器文件的方法就不提了,这里只关心用于下载的两个方法:DownloadStringAsync和OpenReadAsync,一个用于下载字符串,另一个下载文件流。使用方法很相像,以OpenReadAsync为例,值得注意的有这么几点:
1. 此方法使用 GET 方法检索指定的资源。资源是异步下载的。
2. 在完成第一个下载操作前,不能对同一 WebClient 对象再次调用 OpenReadAsync 方法。执行此操作会导致异常。
3. 如果 BaseAddress 属性不是空字符串,且地址不包含绝对 URI,则该地址必须是相对 URI,此 URI 与 BaseAddress 组合在一起构成所请求数据的绝对 URI。
第一点异步下载没什么好说的了,这对于好的用户体验是必须的,否则在下载过程中用户只能绝望的等待,不能看到一点进一步的信息,用户是会疯掉的。
第二点有点意思,是说一个WebClient 对象不可以同时进行两个下载,否则会导致异常。不过言外之意是,如果想要同时下载另外一个文件,可以创建一个新的WebClient 对象。作者未曾验证过,希望没有误解权威的意思。
第三点很重要,WebClient需要一个绝对地址来进行下载。你可以直接提供一个绝对地址,没问题。如果你打算用相对地址,则必须保证BaseAddress 与这个相对地址可以组合成正确的绝对地址。缺省时BaseAddress 为主xap包的地址,例如http://localhost/ClientBin/MyApp.xap。那么你一定要保证相对地址是相对于http://localhost/ClientBin/的。
注意对于DownloadStringAsync和OpenReadAsync 方法,还可以传递一个用户自定义的参数,userToken。“userToken 作为传递到在完成异步操作时调用的方法的 AsyncCompletedEventArgs 的 UserState 属性接收。
举个例子来说,当调用OpenReadAsync 时,可以把文件名当作第二个参数。在注册的下载完成的方法里,e.UserState包含了该文件名,于是你就知道下载的是哪个文件了。
 
WebClient还有一个十分酷的特性,可惜官方帮助没有提及。WebClient可以与浏览器共享缓存文件!具体说来,如果你通过网页浏览已经缓存了某个文件,当你用WebClient下载这个文件时,WebClient会直接从缓存文件中直接读取,不再重新下载。反之亦然,WebClient下载的文件会保存在浏览器缓存目录中,供浏览器和WebClient下次使用。这可是实现silverlight动态下载并缓存的理论基础,十分重要!!
 
当然有些时候开发者并不想使用缓存文件。例如服务器文件更新了,希望下载最新的文件而不是缓存的文件。这种情况怎么处理呢?有人提出了一个解决办法:因为文件缓存是基于url的,如果在url后面加上一些随机的无意义的字符,例如?o=123,则可绕过缓存。缺点是每次下载都会增加新的缓存文件,浪费空间啊。
 
理论准备暂时就这么多了,后面文章将详细讲述WebClient在动态下载中的具体应用。

Silverlight技术研讨(1):WebClient, 文件下载利器相关推荐

  1. Silverlight技术支持谷歌Android

    [计世网消息](刘清河 编译) 当苹果公司没有将Adobe公司的Flash技术集成到iPhone时,就好象已经为其竞争对手微软公司的Silverlight技术提供了一个可乘之机.然而,从目前出现的情况 ...

  2. 奥巴马就职委员会选择微软Silverlight技术

    微软周五宣布,奥巴马就职典礼的网上直播将使用微软Silverlight技术,这一网上直播将通过奥巴马就职委员会的网站进行.预计奥巴马此次就职典礼将吸引大量关注,因此与奥巴马就职委员会的合作是微软一次重 ...

  3. 腾讯的迷你门户首页新闻用到的Silverlight技术引用

    腾讯的迷你门户首页新闻 用到的Silverlight技术引用: <script type="text/javascript" src="/Silverlight.j ...

  4. 腾讯与微软合作,准备应用Silverlight技术

    腾讯和微软计划在Silverlight技术上展开深入合作,腾讯后续会在多项业务中应用Silverlight技术,这个视频展示了腾讯使用Silverlight可能应用的场景. 查看详情:http://l ...

  5. Silverlight技术是什么

    Silverlight技术 微软silverLight是一个跨浏览器.跨客户平台的技术,能够设计.开发和发布有多媒体体验与富交互(Ria,Richinterfaceapplication)的网络交互程 ...

  6. silverlight技术

    牛人介绍的silverlight技术 ttp://www.cnblogs.com/wangkewei/archive/2009/08/20/1550263.html

  7. 西门子博途v16系统要求_西门子博途技术研讨

    工程师们在入门或遇到棘手问题的时候,想获得一盏指路的明灯,除了多思考多实践以外,学会投石问路也许会事半功倍.我所说的"投石问路"其中一种方法就是指要学会查阅资料. 一般我们读到一本 ...

  8. WebClient 文件下载

    //文件地址var path = Utils.GetQueryStringValue("path");//带有http//下载文件到前台文件夹Music下WebClient cli ...

  9. idea如何反编译字节码指令_美团点评:Java字节码增强技术,线上问题诊断利器...

    作者简介:泽恩,美团到店住宿业务研发团队工程师.文章转载于公众号:美团技术团队 1. 字节码 1.1 什么是字节码? Java之所以可以"一次编译,到处运行",一是因为JVM针对各 ...

最新文章

  1. python开发工程师面试题-一名python web后端开发工程师的面试总结
  2. 学生档案管理系统(续)
  3. 排序算法大集锦_合并排序_1(分治思想)
  4. python--8、面向对象的深入知识
  5. spss数据_spss数据分析软件
  6. .net中调用exchange服务器发邮件
  7. 数据结构 - 链表(双向链表学习)
  8. mybatis generator修改默认生成的sql模板
  9. 2022中国人工智能芯片行业研究报告
  10. Java属性文件– java.util.Properties
  11. Linux | 文件系统与操作
  12. 一分钟实现扫描二维码功能
  13. 实验一计算机基础和网络知识竞赛,第十三届计算机基础知识竞赛题库.doc
  14. R语言聚类分析——代码解析
  15. 2021鹏业安装算量软件常见问题整理(十六)
  16. Google Earth Engine(GEE)计算热度(LST)
  17. 使用python读取和分析fasta文件
  18. 传统企业如何精准获客?搭上这趟高科技顺风车
  19. 如何改变Dev-C++的背景色
  20. IQ 智力题 有答案

热门文章

  1. docker入门(镜像)
  2. 全国计算机等级考试模拟考卷 二级C语言程序设计pdf
  3. Flask04_模板语法
  4. LinuxShell编程-脑洞实验-脚本小程序
  5. 解析分账系统,看这篇就够了!
  6. Seay代码审计系统审计实战
  7. 阿里云史上最大规模降价:核心产品价格全线下调,最高降幅达50%
  8. SW toolbox国标生成斜齿轮失败
  9. Python学习之面向对象高级编程
  10. python linux usb摄像头,树莓派用python中的OpenCV输出USB摄像头画面