Silverlight+WCF文件上传,含分段大小调节(WCF 16KB配置)、压缩Buffer调节、速度指示、批量等

本文介绍了在Silverlight项目中实现文件上传功能的挑战,包括WCF服务的16KB限制问题。通过调整WCF配置,如`maxArrayLength`和`maxReceivedMessageSize`,可以解决此限制。文章详细讨论了使用HttpHandler与WCF的比较,WCF的配置方法,以及文件上传速度和压缩策略。此外,还探讨了Silverlight端的并发管理和上传指示控件的设计,以及遇到的UI绑定问题。
摘要由CSDN通过智能技术生成

      近日,随公司的Silverlight项目进展,需要开发文件上传的功能,大致含 文件批量上传、压缩、界面友好 等要求。回想起我在2009年底使用Silverlight 3.0+WCF在VS2008 SP1的环境下开发过文件上传功能,当时就发现在Silverlight端将byte[]数据传递至WCF端时,一旦byte[]大于16KB,WCF端就拒绝接收返回Not Found错误,而且Silverlight端不管怎么配置都不管用,无奈之下只得将WCF服务分成两类,一类用于一次性写入小于16KB的文件;一类用于先创建16KB的文件头,然后再每次写入16KB的数据直至文件写入完成。于是这次开发首先便要突破这个16KB的限制,遂于CSDN上发贴求助,得到了冷秋寒等大虾的大力帮助,不胜感激,难得又到了周末,便把开发过程中的总结贴出来与众人分享,当然总结仅是一家之言,缺乏理论依据支持,还望诸大虾拍砖指正。

 

1. 使用 HttpHandler+WebClient 还是使用 WCF?

      一开始就考虑过是否要使用Http+WebClient,这还是因为WCF的16KB限制,考虑到如果WCF每次只能接收16KB,则一个160KB的Excel文件便要分成10次才能上传完毕,要请求10次WCF服务,既降低了上传速度,又加大了WCF服务器的负担,想必使用Http的文件上传方案由来已久,早有成熟的方案,便向诸大侠请教。后得冷大侠和猛砍赵云兄指点,深夜在Codeplex下载了Silverlight Multi File Uploader 3.0 (http://slfileupload.codeplex.com/releases/view/30368),解压后不禁称奇,因为这个Silverlight Multi File Uploader 3.0中所使用的WCF服务的思路竟然是和我之前写过的WCF极为类似,只不过他简化为只有一类服务,每次只写入16KB的数据,并且通过SL端传入的参数判断是否为第一次写入、是否整个文件写入完成。运行Silverlight Multi File Uploader 3.0,使用Http方式,单次可以上传高达4MB的数据,而使用WCF,也是每次只能上传16KB,难怪该作者在Http方式的页面写道This page uses the HttpUploadHandler.ashx to upload files (faster but not so fancy)。难道只能选择Http方式了?

 

2. 如何配置WCF?

      带着准备要采用Http方式的心,先行开发了文件上传的进度指示器,刚好冷大侠给出了配置WCF的提示,经过测试确定在使用VS2008或VS2010自动生成“启用了Silverlight支持的WCF服务”时,起作用的是maxArrayLength、maxReceivedMessageSize 这两个参数:

  <bindings>
  
<basicHttpBinding>
   
<binding name="NewBinding0" maxReceivedMessageSize="2147483647" transferMode="Buffered">
    
<readerQuotas   maxArrayLength="1024576" /> <!--1024576 为 1024KB-->
    
<security mode="None" />
   
</binding>
  
</basicHttpBinding>
  
<customBinding>
   
<binding name="customBinding0">
    
<

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值