转自:Microsoft 帮助和支持
症状
在尝试使用 HtmlInputFile 控件上载一个大文件时,该文件可能无法上载。
原因
出现此问题是因为 Machine.config 文件 <httpRuntime> 节的 maxRequestLength 参数的默认值为 4096 (4 MB)。所以,默认情况下不会上载大于这个值的文件。
解决方案
要解决此问题,请使用下列方法之一:
• | 在 Machine.config 文件中,将 <httpRuntime> 配置节的 maxRequestLength 属性更改为一个更大的值。这一更改会影响整台计算机。 |
• | 在 Web.config 文件中,替代应用程序的 maxRequestLength 的值。例如,Web.config 中的下面这一项允许上载小于等于 8 MB 字节的文件:
|
更多信息
默认情况下,将此值限制在 4 MB 以限制可能出现的“拒绝服务”攻击。
如果在 Machine.config 文件中设置了 maxRequestLength 属性,其后发布的请求(例如,文件上载)超出了 maxRequestLength 的值,则无法显示自定义错误页。此时,Microsoft Internet Explorer 将显示一条错误消息“Cannot find server or DNS”。
如果在 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 建议您遵照本文中提到的最大文件上载大小。要确定更加精确的文件大小,请对一些类似于在生产中使用的计算机执行压力测试。
如果在文件上载过程中遇到了文件大小限制,可能会看到以下错误消息:
在上载过程中,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 错误而回收。