我们已经为托管在服务器2019年IIS 10上的executionTimeout 4.8应用程序设置了system.web/httpRuntime .net =60。我们不时会看到各种请求大大超过这个超时,有时请求会显示为运行数小时。在哪些情况下,这种超时将不会得到遵守?
发布于 2023-04-11 17:49:00
我也遇到了同样的问题,很难找到答案,简单来说,答案是"executionTimeout处理不是在最新版本的executionTimeout ASP.NET MVC中实现的“(对于任何使用异步请求处理的非MVC ASP.NET应用程序来说也是如此)。您必须在应用程序中创建自己的请求超时逻辑。如果使用进程内会话状态,IIS托管的ASP.NET核心应用程序也是如此;进程外会话状态尊重ASP.NET核心应用程序中的executionTimeout
设置(但在ASP.NET核心应用程序中关闭进程内会话状态并不能解决这个问题--我试过了)。
内部ASP.NET操作变成异步后,IIS执行超时就停止在(预核心)中工作。当HTTP操作是同步的时,运行时只是观察一个请求的线程存活了多长时间,如果花费的时间太长,就会终止它,这是因为一个线程总是绑定在一个请求上。但是,一旦框架发展到HTTP操作变得异步,超时模型就不再工作,因为一个线程最终会处理多个请求,因此您不能在这样或那样的时间之后安全地杀死一个线程。
因此,如果您真的希望入站请求在预核心ASP.NET上超时,则必须在应用程序中实现自己的请求超时逻辑。另一方面,ASP.NET核心似乎实际上仍然适用于httpRuntime executionTimeout
设置(尽管我还没有亲自测试它),但即使这样,它也只能在进程外会话状态上下文中工作;ignore应用程序的进程内会话状态上下文将忽略超时。
网络上的许多答案都是“在system.web compile debug
中关闭web.config
模式”。虽然ASP.NET的调试模式确实是有意地阻止超时被观察到,并且在将标记转换为用于解决问题的false
时,它将不再存在。
2011年的一些答案也声称这个问题将在MVC 4中得到解决,但从来没有解决过。
https://social.msdn.microsoft.com/Forums/en-US/e1141be5-ef9b-4131-8766-315e495e1b4e
https://serverfault.com/questions/1068281
复制相似问题