Winphone文件传输backgroundfileTransfer,上传或下载文件

http://www.silverlightchina.net/html/zhuantixilie/winphone7/2012/0301/14170.htmlhtml

http://www.cnblogs.com/webabcd/archive/2012/07/16/2592989.html web

有一种坑(限制),叫人内心憔悴~~~app

请注意看清楚限制。。less


Windows Phone 7 – Background File Transfer

 学了一阵子关于Background Agent的运用后,感受WP7在Background上的处理,让开发人员学习很是容易,但有些观念可能须要本身多花点时间来看,以避免在送审程式时花了很多的时间成本。ide

  今天要介绍的是Background File Transfer,这是WP7.1 SDK提供的另外一个Backgrund Agent,适合使用的情境可想而知:运用于传输大量档案、背景与Server端交换资讯等。所以,往下将针对重点部分一一说明:学习

  〉Microsoft.Phone.BackgroundTransfer:spa

  WP7.1 SDK提供应用程式伫列一至多个档案进行上传/下载,而且让任务可在背景环境下继续执行,甚至是该应用程式已长时间不在前景执行,另外该API也提供撷取、查询目前file transfer运行的状态,让end user能够了解目前的存取状态。这些功能在Microsoft.Phone.BackgroundTransfer裡都能找到,接着往下介绍二个重要元件:.net

  A. BackgroundTransferRequest与BackgroundTransferService:orm

  A-1. BackgroundTransferRequest:htm

  该物件表明一个transfer request,其内容包括:目标、档案路径、传输方法与如今的传输状态。

  另外,当transfer request下载完成触发completed事件时,记得唿叫background transfer service将这个transfer request进行remove,由于系统必不会自动把它移去。

  重点属性说明:

Name Description
DownloadLocation 取得/设定request档案下载后要储存的local path。可搭配建构子一块儿设定。
Headers 取得request的HTTP headers集合(Dictionary)。
Method 取得/设定request使用的HTTP Method。
TransferPreferences 取得/设定何种条件下transfer能够被使用,属于列举值:TransferPreferences Enumeration。可参考[补充]的说明。
TransferStatus 取得transfer的状态。可配合BytesReceived与BytesSent撷取进度时使用。
TransferError 若是transfer执行了completed,TransferError一般是null。相反的,不为null则表明有错误发生。


  另外,二个重要的事件:TransferProgressChanged与TransferStatusChanged留到範例来讲明。

  A-2. BackgroundTransferService:

  该物件用于初始化一个新的transfer、查询或管理已存在的file transfers。其任务为控制全部的transfer物件,然而,BackgroundTransferRequest.Method仅支援HTTP与HTTPS,尚不支援FTP的协定,因此目前能够透过GET/POST上传或下载档案。

  重点属性说明:

Name Description
Requests 取得向BackgroundTransferServicec中全部启动的transfer requests。其角色与ScheduledActionService中的GetActions很类似。
Add 增长background transfer request至伫列中。
Find 透过指定的ID(RequestId)去企图取回特定的background transfer reqeust。
Remove 透过指定的ID(RequestId)去企图移除特定的background transfer reqeust。


  了解了BackgroundTransferService的角色以后,要特别注意的是:

  a-2-1. 每个应用程式只能有5个request在给定的时间内。

  a-2.2. 企图增长超过5个request时,系统会自动发出Exception。

  a-2-3. 若是要移除伫列中的request,请透过Remove的方法,该方法移除成功后会触发Completed的事件。

  C. Background Transfer Policies (Background Transfer基本守则):

  C-1. File System Restrictions(档案路径使用条件):

  全部的background trasnfers都须要有一个 local file path(实际本机路径)。下载档案须要指定要储存的实际位置;

  上传档案需指定要从那一个实际位置将档案上传,所以,全部的background tansfers使用的档案路径,必须存在于isolated storage的固定路径:「/shared/transfers」之中,该资料表是在程式被安装至设备后,自动产生出来的,若是本身手动删除或改名了,必须再重建一个相同名称的资料夹,才能初始化全部的transfers物件。

  另外,可在/shared/transfers资料夹下建构须要档案结构,这是合法的,但若是使用transfers时使用的是非特定的路径,那transfer将没法被初始化则会出现exception。

  C-2. Sizes(档案大小):

最大上传档案大小 5 MB
在行动网路,最大下载档案大小 20 MB 
若是档案超过限制,TransferPreferences属性会自动转变成AllowBattery,这将变成要求于Wi-Fi环境下才能进行传输。
在Wi-Fi,没有外接电源,最大下载档案大小 100 MB 
若是档案超过100 MB,需设定TransferPreferences属性为"None",不然传输会失败。若是应用时不肯定传输档案的大小时,建议设定成None能够确保传输程序不会被拒绝。


  C-3. Limits(限制):

每一个应用程序的最大未完成请求伫列量。(包括:active与pending的请求)
因为传输完成后,传输请求并不会被自动移除,须要透过Remove(BackgroundTransferRequest)去除存在伫列中已完成的项目。
设备上跨全部应用程序的目前最大传输程序
当前最多只有二个Background File Transfer在运做。
设备上跨全部应用程序的最大伫列传输程序 
(Maximum queued transfers across all applications on the device)
500
每一个Requeset的HTTP headers最大数量 15
HTTP headers的最大容量 16 KB each


  另外,在使用HTTP headers时,有几个保留字是不可使用于BackgroundTransferRequest,以下:

  「If-Modified-Since」、「If-None-Match」、「If-Range」、「Range」与「Unless-Modified-Since」。

  C-4. Policies(守则):

  background file transfer不支援在「non-simultaneous voice」与「2G, EDGE, Standard GPRS」环境使用。

  =>所以,background file transfer只支援在Wi-Fi、3G(或更快速)的网路环境。

  当档案大小超过5 MB时,HTTP headers中的「content-length」与「range」 是必要存在的。Server端应该

  永远在response中回传content-length的值。若是不这样作,可能会形成严重的传输效能煺化。

  C-5. Slow Transfer(较慢的速度):

  若是网路的速度低于下列的速度,传输任务会被paused(暂停)与retried(从新连线):

  => 3G (50 kbps);Wi-Fi(100 kbps)

  〉範例说明:

  该範例为撰写一个透过手机下载图示至本机IIS裡。看起来很是容易吧,由于在前年我已经有写过一个下载档案的程式範例:,当时是使用WebClient实做Download的功能,但它只能在程式执行时使用,今天範例则是要让它也能在背景执行。

  a. 程式启动后,先检查「/shared/transfers」是否存在;

相关文章
相关标签/搜索