我需要在控制器中以编程方式增加应用程序中特定控制器操作的请求超时。
答案 0 :(得分:4)
到目前为止,我发现处理长时间运行脚本的最佳方法(如果你的应用程序根本无法避免),首先要创建一个异步处理程序:
public async Task<IActionResult> About()
{
var cts = new CancellationTokenSource();
cts.CancelAfter(180000);
await Task.Delay(150000, cts.Token);
return View();
}
在上面的代码片段中,我添加了一个取消令牌,说我的异步方法应该在180秒后取消(即使在这个例子中它永远不会延迟超过150秒)我已经添加了超时以确保有限制我的脚本可以运行多长时间。
如果您运行此操作,您将收到HTTP错误502.3,因为httpPlatform上的超时设置为00:02:00。
要延长此超时,请转到wwwroot文件夹中的web.config文件,并将requestTimeout =“00:05:00”属性添加到httpPlatform元素。例如:
<httpPlatform requestTimeout="00:05:00" processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
长时间运行的脚本现在应该可以运行了。
但这意味着任何请求都需要5分钟才能超时,因此您必须确保使用CancellationToken技巧来限制应用程序中的任何异步请求。在以前的MVC版本中,我们有可以添加到控制器的AsyncTimeOut属性,但似乎已经在MVC6 See GitHub aspnet/mvc Issue #2044中删除了