是否可以通过 Kestrel 的“代码”设置“aspNetCore requestTimeout”值.......?

gra*_*der 1 asp.net asp.net-web-api asp.net-core

是否可以使用 Kestrel 设置“aspNetCore requestTimeout”值(请参阅下面的 xml).......通过“代码”?

我在 KestrelServerLimits 对象上找不到任何东西。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.server.kestrel.core.kestrelserverlimits?view=aspnetcore-3.1

下面是 xml 代码.......但希望在 CODE 中做到这一点,而不是通过(发布的)xml。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore requestTimeout="00:20:00"  processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我想下面的(“serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromSeconds(5)”)......但是这并没有控制从我的邮递员测试服务器超时。

namespace MyStuff
{
    using System;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();

                    webBuilder.ConfigureKestrel(serverOptions =>
                    {
                        serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromSeconds(5);
                    });

                });
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在阅读这篇微软文章:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#kestrel-options

Kestrel 选项 Kestrel Web 服务器具有约束配置选项,这些选项在面向 Internet 的部署中特别有用。

对 KestrelServerOptions 类的 Limits 属性设置约束。Limits 属性包含 KestrelServerLimits 类的实例。

Dmi*_*try 6

不。这个 GitHub 问题说:

没有办法强行终止 .NET 任务。这就是为什么我们不能自己阻止失控的 CPU 进程。

requestTimeoutweb.config 中的 IIS 超时将停止等待来自您的 web 应用程序的响应并向客户端返回 500 错误,但您的网络服务器 (Kestrel) 将继续处理请求。并且没有人可以中断它(只有重新启动 kestrel 进程会有所帮助),这就是为什么 kestrel 中没有这样的配置设置。

  • @SylvainGantois 核心问题是它**不选择**无超时。这些预计需要很长时间的“实际应用程序”应该能够“请求”更多时间,**单独**。否则,花费太长的代码只是有缺陷的。我花了数年时间来解决与缺乏“理智超时”相关的问题。 (2认同)