Gar*_*ton 18 asp.net iis iis-7 castle-monorail iis-7.5
我希望我的应用程序中的某些URL具有不同的连接限制.某些URL接受文件上载,并且需要具有较大的连接超时.所有其他URL都需要更小的超时,以防止拒绝服务而不浪费资源.
目前我在IIS中为整个站点设置了连接超时属性为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>
Run Code Online (Sandbox Code Playgroud)
所以我希望这会将所有URL设置为8分钟超时,并允许WriteFile.rails URL运行60分钟.相反,允许所有URL运行60分钟.如何让IIS执行我想要的操作?
Gar*_*ton 29
该问题具体涉及超时,但也暗示设置maxRequestLength.我将尝试对这两个问题给出一个非常全面的答案(现在我花了大部分时间来解决这个问题).
假设我们的网站上有一个我们想要处理文件上传的URL.我们希望在该URL上获取最多1千兆字节的数据,我们将允许客户连接最多1小时.我们想要的所有其他URL只允许90秒的连接时间,并且POST主体中最多只有4MB.
首先,您必须全局提高整个站点的时间和大小限制.首先,您要为整个站点设置"连接超时".这充当绝对上限,无法在web.config中设置.IIS7网站在这里有很好的说明.您也可以使用IIS7/7.5附带的Microsoft.Web.Administration 库以编程方式执行此操作:
var serverManager = ServerManager.OpenRemote("\\web-server-name");
var site = serverManager.Sites["Your-Site-Name"];
site.Limits.ConnectionTimeout = new TimeSpan(1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
接下来,您需要设置站点允许的最大大小请求.这与Request Fitlering模块完全不同.IIS7上默认情况下可能未安装此模块.Microsoft再次提供了有关如何通过GUI 进行设置的良好说明maxAllowedContentLength.这是您可以在Web.config中设置的内容:
<system.webServer>
<security>
<requestFiltering>
<!-- Allow 1GB uploads -->
<requestLimits maxAllowedContentLength="1073741824"></requestLimits>
</requestFiltering>
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
此设置将根据Content-Length标头进行评估,大于此的请求将立即生成404.13.设置以字节为单位,接下来是Kilobytes,这与IIS7非常一致.
接下来,我们希望以90秒/ 4MB的速度限制所有ASP.NET请求.这可以在web.config中完成:
<location>
<system.web>
<httpRuntime executionTimeout="90" maxRequestLength="4096" />
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
要使设置全局化,system.web标记将包装在location没有path属性的标记中.(在最初的问题中,我没有在位置标记中包装system.web标记,这可能是我的问题的根源.) maxRequestLength这次以千字节为单位.
最后,我们希望允许我们的特殊上传网址接受大量上传.将这些值设置为高于您设置的值将不起作用.全局值会覆盖这些设置.
<location path="Uploads/PostFile.rails">
<system.web>
<httpRuntime executionTimeout="3600" maxRequestLength="1048576" />
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
如果其他一切设置正确,那应该这样做.正如Peter Bromberg所建议的那样,您可以根据需要添加尽可能多的块来提高特定URL的限制.
最后一点:在调试模式下,IIS不会强制执行Connection Timeout或executionTimeout设置,以便您有更多时间进行调试.因此,要在开发人员计算机上测试您的设置,您应该执行发布版本,并且应该将"启用服务器端调试"设置为false.
| 归档时间: |
|
| 查看次数: |
30096 次 |
| 最近记录: |