zoukankan      html  css  js  c++  java
  • ASP.net下大文件上传的几个问题讨论

    我研究这个问题已经很长时间了,ASPUpload的组件以及其它几个组件都使用过,多多少少对这些组件的工作原理有些了解,对于其它一些问题的讨论也都遇到过。前几个星期开发的WebbUpload2.0经过一段时间的测试后,发现它完全是一个超级大BUG,所以放弃发布它了。(不想害人了。)

    先收集一些网络上关于这个问题的一些内容:

    http://blog.joycode.com/saucer/archive/2004/03/16/16225.aspx 
    http://www.cnblogs.com/bestcomy/archive/2004/06/09/14267.aspx BestCompy的上传组件
    http://www.cnblogs.com/lion.net/archive/2004/07/14/24294.aspx lion 的上传组件
    http://www.voidland.com/blog/article.asp?id=22


    一般情况下,用ASP,net上传大文件会遇到以下几个问题:
    1、无法Catch的页面找不到错误,一般会是DNS错误,这里有一个小讨论。
    http://koffer.cnblogs.com/archive/2005/04/21/142799.aspx

    2、还会遇到这样的几个问题:
    Action cancled,我在测试WebbUpload2.0的时候遇到多次,跟踪的LOG发现是用户取消了上传。然而这是不可能的,唯一的可能就是IIS自动取消了用户上传。

    还有一个错误就是:The page cannot be displayed
    这个错误我也遇到过N次。而且为此郁闷了好几天。

    总结一下问题:
    首先要明确,在网络环境不是很坏的情况下,我们是可以在ASP.net下上传超级大文件的。BestCompy的组件就是一个很好的例子,然而对于出现的问题,我们要明确原因,然后再来处理。
    1、Action canceled问题,
    出现这一问题其实只有一种情况,就是在实现HttpMoudule的时候,出现程序错误。这时候IIS直接返回Action canceled,而不再生成逻辑页面。我在调试程序的时候发现,不仅在HttpModule里出现错误时,页面直接Cancel掉,而且在它的子函数里出现任何错误都一样!
    有一个解决方法可以显示的让页面报误,就是大块的Catch,把整个Module Catch住,然后抛出自己的异常,这样会在进度条显示页面上看到这个错误。(不知道为什么会是在进度条页面上)。而上传页面上只有一个action canceled错误,但在访问其它页面前,它会快速的显示一下自己定义的错误。
    因此解决这一问题的唯一方法就是:确保你的上传模块不能有任何的错误,否则IIS就直接Cancel掉了。注意:是在传超级大文件时(>100MB)。其它的不与讨论。

    还有个错误就是The page cannot be displayed,报DNS错误。这个错误我一直不知道为什么,后来跟踪IIS内存,发现上传过程中,消耗过大时,IIS的进程会消失一次!不用说,就在这消失的一瞬间,页面找不到了(很正常不是吗?)。在MSDN上找到了相关的说明:
    http://support.microsoft.com/kb/893227
    这给我们的程序设计出了个大难题,我的WebbUpload2.0失败之处就是内存占用太大了,在上传1G的文件时,内存直线上升,到300MB的时候,IIS就闪了一次,于是出现页面找不到。跟踪发现在算法只一味的追求速度,而没有管内存。这是一个失败的做法!也让自己清醒了一次。
    知道错误以后,就可以自己解决问题。
  • 相关阅读:
    开始接触开源FTP工具 FileZilla
    借船过河:一个据说能看穿你的人性和欲望的心理测试
    Git的使用方法级相关资料
    写给自己的一封信:亲爱的自己
    试用豆瓣电台2天
    HTML5 入门:一个最简单的HTML页面(doctype、meta、Head、标签的使用)
    读《乌合之众》附电子书下载
    快速了解Flash CS5六大特点
    读《每天懂一点成功概率学》
    PhotoshopCS6快捷键
  • 原文地址:https://www.cnblogs.com/WuCountry/p/438484.html
Copyright © 2011-2022 走看看