![ASP.net IIS 请求在执行超时值后未超时](https://linux22.com/image/768021/ASP.net%20IIS%20%E8%AF%B7%E6%B1%82%E5%9C%A8%E6%89%A7%E8%A1%8C%E8%B6%85%E6%97%B6%E5%80%BC%E5%90%8E%E6%9C%AA%E8%B6%85%E6%97%B6.png)
答案1
我遇到了同样的问题,并且很难找到答案,简短的答案是“executionTimeout 处理未在最新版本的 pre-Core ASP.NET MVC 中实现”(对于使用异步请求处理的任何非 MVC ASP.NET 应用程序也是如此)。您必须在应用程序中制定自己的请求超时逻辑。如果 IIS 托管的 ASP.NET Core 应用程序使用进程内会话状态,则情况也是如此;进程外会话状态遵循 ASP.NET executionTimeout
Core 应用程序中的设置(但在 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/e1141be5-ef9b-4131-8766-315e495e1b4e