平台:IIS 6,ASP.Net 2.0(.Net 3.5),Server 2003。
我正在构建一个接受用户文件,处理它们并返回结果的应用程序。使用HTTP POST将文件上载到ASP.Net Web表单。该应用程序需要一些大文件(数百MB)。
我正在使用SWFUpload通过一个很好的进度条完成上传,但这并没有导致这个问题,因为当我使用指向我的上传接受页面的标准HTML表单绕过它时,我得到了完全相同的错误。使用进度条时,上传继续为100%,然后失败。使用标准形式,行为似乎是相同的。
我现在正在上传一个大约150MB的文件。我已经改变了我能找到的所有设置,但仍然没有运气。
以下是我到目前为止所改变的内容摘要:
在Web.config中: 在system.web中添加了这个:
<httpRuntime executionTimeout="3600" maxRequestLength="1536000"/>
在machine.config中: 在system.web里面,改了:
<processModel autoConfig="true" />
到:
<processModel autoConfig="true" responseDeadlockInterval="00:30:00" responseRestartDeadlockInterval="00:30:00" />
并在MetaBase.xml中: 改变:
AspMaxRequestEntityAllowed="204800"
为:
AspMaxRequestEntityAllowed="200000000"
当上传失败时,我从IIS收到404错误。我的Web表单没有开始处理,或者至少它没有进入Page_Load事件。我在该处理程序的开头抛出异常,并且它根本不会在大文件上执行。
小文件一切正常(我测试了大约5.5MB)。我不确定文件大小是什么限制,但我知道我的限制需要高于150MB,因为这不是客户端需要上传的最大文件。
有人可以帮忙吗?
答案 0 :(得分:5)
Urlscan在所有网站上都有效,并且拥有自己的请求实体长度限制。我不知道Urlscan是在我们的服务器上运行的,因为它是一个全局ISAPI过滤器,不在我的个人网站上运行。
注意:要找到全局ISAPI筛选器,请右键单击IIS Admin中的“Web站点”文件夹,然后单击“属性”,再单击“ISAPI筛选器”选项卡上的“属性”。
答案 1 :(得分:3)
(针对googlers的说明):
对于IIS7,请在下面添加到web.config(我在<system.serviceModel>
上面添加):
<system.webServer>
<security>
<requestFiltering><requestLimits maxAllowedContentLength="262144000" /></requestFiltering> <!-- maxAllowedContentLength is in bytes. Defaults to 30,000,000 -->
</security>
</system.webServer>
答案 2 :(得分:2)
当我们遇到这个问题时,我们不得不根据这篇KB文章增加缓冲区大小限制: http://support.microsoft.com/kb/944886/en-us
我知道这提到了ASP,但我相信它也适用于ASP.NET。
修改:这是一个可能与您的问题更相关的链接,并提供其他选项:
http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx
答案 3 :(得分:1)
404并且缺少Page_Load:IIS只能在服务器上完成POST后处理请求。因此,如果POST失败(由于其大小),则无法触发页面的事件。
您可以尝试NeatUpload http://www.brettle.com/neatupload。 从手册:“默认情况下,NeatUpload不会直接限制上传的大小。”
答案 4 :(得分:0)
您还可以尝试Velodoc XP Edition,它比NeatUpload有几个优势,包括它使用ASP.NET Ajax扩展。有关详细信息,另请参阅the Velodoc web site。
答案 5 :(得分:0)
你说:
但是1536000只有1.5MB?