ASP.net IIS 请求在执行超时值后未超时

ASP.net IIS 请求在执行超时值后未超时

我们已为托管在服务器 2019 IIS 10 上的 .net 4.8 应用程序设置了 system.web/httpRuntime 执行超时时间 = 60s。有时,我们会看到各种请求大大超出此超时时间,有时请求会显示为运行了数小时。哪些情况下不会遵守此超时时间? IIS 设置

少数长时间运行的请求

答案1

我遇到了同样的问题,并且很难找到答案,简短的答案是“executionTimeout 处理未在最新版本的 pre-Core ASP.NET MVC 中实现”(对于使用异步请求处理的任何非 MVC ASP.NET 应用程序也是如此)。您必须在应用程序中制定自己的请求超时逻辑。如果 IIS 托管的 ASP.NET Core 应用程序使用进程内会话状态,则情况也是如此;进程外会话状态遵循 ASP.NET executionTimeoutCore 应用程序中的设置(但在 pre-Core ASP.NET 中关闭进程内会话状态并不能解决这个问题——我试过了)。

详细解释

在内部 HTTP 操作变为异步后,IIS 执行超时在(核心前)ASP.NET 中停止工作。当 HTTP 操作同步时,运行时只需观察请求线程的生存时间,如果生存时间过长,则将其终止,这是可行的,因为一个线程始终与一个请求绑定。但是,一旦框架发展到 HTTP 操作变为异步,该超时模型就不再起作用,因为一个线程最终会处理多个请求,因此您不能在某个时间之后安全地终止线程。

因此,如果您确实希望入站请求在预 Core ASP.NET 上超时,则必须在应用程序中为此实现自己的请求超时逻辑。另一方面,ASP.NET Core 似乎实际上可能仍可以使用该httpRuntime executionTimeout设置(尽管我自己没有测试过),但即使这样,它也只能在进程外会话状态上下文中工作;IIS 托管的 ASP.NET Core 应用程序的进程内会话状态上下文将忽略超时。

红鲱鱼

网络上的许多答案都说“关闭system.web compile debug模式web.config”。虽然 ASP.NET 的调试模式确实有意阻止观察到超时,但将标志设置为false 用过的解决问题,就不会再有了。

2011 年的一些答案也声称该问题将在 MVC 4 中得到解决,但事实并非如此。

来源

预核心 ASP.NET

https://social.msdn.microsoft.com/Forums/en-US/4c50c754-d667-4fef-9975-6fe6a8da62e3/webconfig-executiontimeout-not-working-in-aspnet-mvc?forum=aspmvc

https://social.msdn.microsoft.com/Forums/en-US/e1141be5-ef9b-4131-8766-315e495e1b4e

ASP.NET 核心

https://github.com/dotnet/aspnetcore/issues/23160

相关内容