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

Silverlight技术研讨(1):WebClient, 文件下载利器,第1张

概述 对于小型的Silverlight应用程序,可以把所有内容,包括资源,都包含在一个Xap包中发布。对于开发者来说,是个很便利的选择,可以把更多的精力和时间用到程序的功能方面,提高开发效率。但是对于使用者来说,如果xap文件过大,需要下载几分钟或者更长时间才能看到实际效果,可能是一个很糟糕的用户体验,一定需要很大的勇气和决心才会再次访问。为了解决初始下载主包时间太长的问题,开发者一般会把比较大的音频

 对于小型的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 作为传递到在完成异步 *** 作时调用的方法的 AsyncCompletedEventArgsUserState 属性接收。 举个例子来说,当调用OpenReadAsync 时,可以把文件名当作第二个参数。在注册的下载完成的方法里,e.UserState包含了该文件名,于是你就知道下载的是哪个文件了。   WebClIEnt还有一个十分酷的特性,可惜官方帮助没有提及。WebClIEnt可以与浏览器共享缓存文件!具体说来,如果你通过网页浏览已经缓存了某个文件,当你用WebClIEnt下载这个文件时,WebClIEnt会直接从缓存文件中直接读取,不再重新下载。反之亦然,WebClIEnt下载的文件会保存在浏览器缓存目录中,供浏览器和WebClIEnt下次使用。这可是实现silverlight动态下载并缓存的理论基础,十分重要!!   当然有些时候开发者并不想使用缓存文件。例如服务器文件更新了,希望下载最新的文件而不是缓存的文件。这种情况怎么处理呢?有人提出了一个解决办法:因为文件缓存是基于url的,如果在url后面加上一些随机的无意义的字符,例如?o=123,则可绕过缓存。缺点是每次下载都会增加新的缓存文件,浪费空间啊。   理论准备暂时就这么多了,后面文章将详细讲述WebClIEnt在动态下载中的具体应用。 @H_301_92@

总结

以上是内存溢出为你收集整理的Silverlight技术研讨(1):WebClient, 文件下载利器全部内容,希望文章能够帮你解决Silverlight技术研讨(1):WebClient, 文件下载利器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存