目前,我将IIS中的Connection Timeout属性设置为整个站点到60分钟.然后我在web.config中这样做:
<system.web> <httpRuntime executionTimeout="480" maxRequestLength="1024" /> </system.web> <location path="FileUpload/WriteFile.rails"> <system.web> <httpRuntime executionTimeout="3600" maxRequestLength="512000" /> </system.web> </location>
所以我希望这将把所有URL设置为8分钟超时,并允许WriteFile.rails URL运行60分钟.相反,所有URL都可以运行60分钟.如何让IIS做我想做的事情?
解决方法
假设我们的网站上有一个我们要处理文件上传的URL.我们希望在该网址上吸收最多千兆字节的数据,我们将允许客户端连接至多1小时.我们想要的所有其他URL只允许90秒的连接时间,最多4MB的POST主体.
全局设置
首先,您必须全球提高整个网站的时间和大小的限制.首先,您要为整个站点设置“连接超时”.这充当绝对的上限,不能在web.config内设置. IIS7网站有good instructions here.您还可以使用IIS7 / 7.5附带的Microsoft.Web.Administration library进行编程:
var serverManager = ServerManager.OpenRemote("\\web-server-name"); var site = serverManager.Sites["Your-Site-Name"]; site.Limits.ConnectionTimeout = new TimeSpan(1,0);
接下来,您需要设置该站点允许的最大大小请求.在“请求调整”模块中,这完全不同.默认情况下,此模块可能未安装在IIS7上.同样,Microsoft还有good instructions,通过GUI设置maxAllowedContentLength.这可以从Web.config中设置:
<system.webServer> <security> <requestFiltering> <!-- Allow 1GB uploads --> <requestLimits maxAllowedContentLength="1073741824"></requestLimits> </requestFiltering> </security> </system.webServer>
此设置根据Content-Length标头进行评估,并且大于此的请求将立即导致404.13.该设置是以字节为单位,接下来是以千字节为单位,这个IIS7非常一致.
ASP.NET设置
接下来,我们希望以90秒/ 4MB的速度覆盖所有ASP.NET请求.这可以在web.config中完成:
<location> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" /> </system.web> </location>
要使设置全局,system.web标签被包装在没有路径属性的位置标签中. (在原始问题中,我没有将system.web标签包装在位置标签中,这可能是我的问题的根源.)maxRequestLength这次是以千字节为单位.
最后,我们希望允许我们的特殊上传网址接受巨大的上传.将这些值设置为高于全局设置的值将不起作用.全局值覆盖这些设置.
<location path="Uploads/PostFile.rails"> <system.web> <httpRuntime executionTimeout="3600" maxRequestLength="1048576" /> </system.web> </location>
如果一切都是正确的,那就应该这样做.正如Peter Bromberg所建议的,您可以根据需要增加这些块,以提高特定URL的限制.
最后一个注意事项:在调试模式下,IIS不强制执行Connection Timeout或executionTimeout设置,以允许您更多的时间进行调试.因此,要在开发人员机器上测试您的设置,您应该执行发布版本,您应该将“启用服务器端调试”设置设置为false.