转自:Microsoft 帮助和支持

症状

在尝试使用 HtmlInputFile 控件上载一个大文件时,该文件可能无法上载。

原因

出现此问题是因为 Machine.config 文件 <httpRuntime> 节的 maxRequestLength 参数的默认值为 4096 (4 MB)。所以,默认情况下不会上载大于这个值的文件。

解决方案

要解决此问题,请使用下列方法之一:
在 Machine.config 文件中,将 <httpRuntime> 配置节的 maxRequestLength 属性更改为一个更大的值。这一更改会影响整台计算机。
在 Web.config 文件中,替代应用程序的 maxRequestLength 的值。例如,Web.config 中的下面这一项允许上载小于等于 8 MB 字节的文件:
<httpRuntime maxRequestLength="8192" />    


更多信息

默认情况下,将此值限制在 4 MB 以限制可能出现的“拒绝服务”攻击。

如果在 Machine.config 文件中设置了 maxRequestLength 属性,其后发布的请求(例如,文件上载)超出了 maxRequestLength 的值,则无法显示自定义错误页。此时,Microsoft Internet Explorer 将显示一条错误消息“Cannot find server or DNS”。
理论上,最大文件上载大小是相当大的。但是,由于 ASP.NET 的运行状况监视,无法在 ASP.NET 中上载很大的文件。ASP.NET 工作进程具有 2 GB 的虚拟地址空间。但是,由于运行状况监视和内存碎片,ASP.NET 工作进程只能使用稍多于 1 GB 的空间。

在上载过程中,ASP.NET 首先将整个文件加载到内存中,然后用户才可以将该文件保存到磁盘。因此,由于 Machine.config 文件中 processModel 标记的 memoryLimit 属性,该进程可能会回收。memoryLimit 属性指定了 ASP.NET 工作进程在自动回收之前可以占用的物理内存的百分比。回收可防止因内存泄漏而导致 ASP.NET 崩溃或停止响应。

另外,其他因素也会影响可以上载的最大文件大小。这些因素包括可用内存、可用硬盘空间、处理器速度和当前网络流量。对于上载的常规流量的文件,Microsoft 建议您让最大文件大小介于 10 到 20 MB 之间。如果您很少上载文件,则最大文件大小可以为 100 MB。

注意:在 ASP.NET 中可以上载大于 100 MB 的文件。但是,Microsoft 建议您遵照本文中提到的最大文件上载大小。要确定更加精确的文件大小,请对一些类似于在生产中使用的计算机执行压力测试。

如果在文件上载过程中遇到了文件大小限制,可能会看到以下错误消息:
该页无法显示。
服务器应用程序不可用
在事件日志中,该错误消息将与以下内容类似:

aspnet_wp.exe (PID:PIDNumber) 被回收,因为内存消耗超过了 SizeLimit MB(可用 RAM 的百分之 Percentage)。

引发了类型为 System.OutOfMemoryException 的异常。
 
您还会发现上载速度变得很慢。如果在 Windows 任务管理器中监视 Aspnet_wp.exe 进程,您将注意到内存的增量变化为每 1 至 2 秒 64 KB。根据文件的大小,这种延迟可能会导致 ASP.NET 工作进程由于 responseDeadlock 错误而回收。
posted on 2008-07-24 21:55  stg609  阅读(1187)  评论(0编辑  收藏  举报
分享按钮