如何在ASP.NET中为不同的URL设置不同的超时

前端之家收集整理的这篇文章主要介绍了如何在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相关文章