如何在ASP.NET中为不同的URL设置不同的超时
我想要在我的应用程序中的一些URL的不同的连接限制.一些URL接受文件上传,并需要大量连接超时.所有其他URL都需要更小的超时时间,以防止拒绝服务,而不会浪费资源.
目前,我将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做我想做的事情? 解决方法
这个问题具体关于超时问题,但也暗示设置maxRequestLength.我将尝试对这两个问题提供一个真正全面的答案(现在我花了大部分时间来处理这些问题).
假设我们的网站上有一个我们要处理文件上传的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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何找到ThreadPool工作线程正在做什么?
- asp.net-mvc-3 – mvc3中的默认页面在哪里?
- asp.net-mvc – 查找:DisplayTemplates速度
- asp.net-mvc-3 – 带有HTML.ActionLink的ASP.NET MVC Razor
- asp.net中的泛型处理程序是什么?
- asp.net – 文件上传控件HasFile始终为false,name始终为Emp
- ASP.NET Web API可以在与MVC相同的URL上工作吗?
- asp.net – ReportViewer控件和Ajax UpdatePanel
- asp.net – 文件 – >在MonoDevelop中打开网站?
- "<a href='../目录" +变量+ 
- asp.net – ASP .Net Web API下载图像为二进制
- 在ASP.NET和Silverlight 2之间共享DAL的最佳实践
- asp.net-mvc – 如何使用razor语法转换为对象
- ASP.NET Core部署在IIS中后,报无法打开登录所请
- asp.net-mvc-3 – MVC如何忽略嵌套视图模型的验证
- asp.net – 外键在VS2012 RC中未被识别
- asp.net – Internet Explorer中的“通过电子邮件
- asp.net – 如何摆脱丑陋的asp:菜单闪烁?
- 在ASP.NET C#中调用Web服务时,Session为null
- asp.net – Intranet / Internet的Windows身份验