如何为IIS和IIS Express上的一个控制器操作设置请求超时

本文关键字:IIS 控制器 一个 操作 设置 超时 请求 Express | 更新日期: 2023-09-27 18:29:15

我需要在控制器中以编程方式增加应用程序中特定控制器操作的请求超时。

如何为IIS和IIS Express上的一个控制器操作设置请求超时

到目前为止,我发现的处理长时间运行的脚本的最佳方法(如果您的应用程序无法避免使用)是首先创建一个异步处理程序:

public async Task<IActionResult> About()
    {
            var cts = new CancellationTokenSource();            
            cts.CancelAfter(180000);
            await Task.Delay(150000, cts.Token);
        return View();
    }

在上面的代码段中,我添加了一个Cancellation令牌,表示我的异步方法应该在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中似乎已经删除了该属性。请参阅GitHub aspnet/MVC Issue#2044