c# - 如何为 IIS 和 IIS Express 上的一个 Controller 操作设置请求超时

标签 c# iis asp.net-core asp.net-core-mvc iis-express

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

最佳答案

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

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 属性,您可以将其添加到 Controller 中,但似乎在 MVC6 中已将其删除 See GitHub aspnet/mvc Issue #2044

关于c# - 如何为 IIS 和 IIS Express 上的一个 Controller 操作设置请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637488/

相关文章:

python - 如何在IIS服务器上的conda基础环境中部署python Flask应用程序?

asp.net - IIS 6/ASP.NET Windows 身份验证 list ?

c# - JSON 返回 PascalCase 格式的属性,而不是 CamelCase 格式

c# - 在 C# 中确定对象 o 是 Action<...> 还是 Func<....>

c# - 从 C# 代码构建跨平台共享库

c# - IIS应用程序池回收和 native 程序集

c# - Xamarin 谷歌地图

iis - 使用 Microsoft.Web.Administration 获取远程应用程序池状态

c# - 三层应用程序中 EF Core 中的自动迁移

asp.net-core - 如何在 Swagger UI 中包含 X-XSRF-TOKEN header ?