gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:01:19 27 4
gpt4 key购买 nike

我希望应用程序中的某些 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>

所以我希望这会将所有 URL 设置为 8 分钟超时,并允许 WriteFile.rails URL 运行 60 分钟。相反,所有 URL 都允许运行 60 分钟。如何让 IIS 执行我想要的操作?

最佳答案

该问题专门询问了超时,但也暗示设置 maxRequestLength。我将尝试对这两个问题给出一个真正全面的答案(现在我已经花了一天的大部分时间来解决这个问题)。

假设我们的网站上有一个 URL,我们想要处理文件上传。我们希望在该 URL 上接收多达 1 GB 的数据,并且我们将允许客户端连接最多 1 小时。我们希望所有其他 URL 只允许 90 秒的连接时间和 POST 正文中的最大 4MB。

全局设置

首先,您必须全局提高整个网站的时间和大小限制。首先,您要为整个站点设置“连接超时”。这是一个绝对上限,不能在 web.config 中设置。 IIS7网站有good instructions here 。您还可以使用 Microsoft.Web.Administration library 以编程方式执行此操作。 IIS7/7.5 附带的:

var serverManager = ServerManager.OpenRemote("\\web-server-name");
var site = serverManager.Sites["Your-Site-Name"];
site.Limits.ConnectionTimeout = new TimeSpan(1, 0, 0);

接下来您需要设置站点允许的最大大小请求。这是在完全不同的地方,在 Request Fitlering 模块中。默认情况下,IIS7 上可能未安装此模块。微软再次有 good instructions了解如何通过 GUI 设置 maxAllowedContentLength。您可以在 Web.config 中进行设置:

<system.webServer>
<security>
<requestFiltering>
<!-- Allow 1GB uploads -->
<requestLimits maxAllowedContentLength="1073741824"></requestLimits>
</requestFiltering>
</security>
</system.webServer>

此设置根据 Content-Length header 进行评估,大于此的请求将立即导致 404.13。设置以字节为单位,接下来的内容以千字节为单位,这与 IIS7 非常一致。

ASP.NET 设置

接下来,我们希望将所有 ASP.NET 请求限制为 90 秒/4MB。这可以在 web.config 中完成:

<location>
<system.web>
<httpRuntime executionTimeout="90" maxRequestLength="4096" />
</system.web>
</location>

为了使设置全局化,system.web 标记被包装在没有 path 属性的 location 标记中。 (在最初的问题中,我没有将 system.web 标记包装在位置标记中,这可能是我的问题的根源。)maxRequestLength 这次以千字节为单位。

最后,我们希望允许我们的特殊上传 URL 接受大量上传。将这些值设置为高于全局设置的值是行不通的。全局值会覆盖这些设置。

<location path="Uploads/PostFile.rails">
<system.web>
<httpRuntime executionTimeout="3600" maxRequestLength="1048576" />
</system.web>
</location>

如果其他一切都设置正确,那就可以了。正如 Peter Bromberg 所建议的,您可以根据需要添加任意数量的这些 block ,以提高特定 URL 的限制。

最后一点:在 Debug模式下,IIS 不会强制执行连接超时或执行超时设置,以便您有更多时间进行调试。因此,要在开发人员计算机上测试您的设置,您应该执行发布版本,并将“启用服务器端调试”设置设置为 false

关于asp.net - 如何在 ASP.NET 中为不同的 URL 设置不同的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com