Kestrel 是 ASP.NET Core 项目模板中默认包含和启用的 Web 服务器,在不使用反向代理的情况下,如何设置应用的超时时间
我可以设置Kestrel的超时时间,当我的接口在指定时间内没有完成工作时,将自动以504状态码响应
今天在查阅asp.net core官方文档的时候看到了在ASP.NET Core 8.0新增了超时中间件
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddRequestTimeouts (this Microsoft.Extensions.DependencyInjection.IServiceCollection services)
以及
public static Microsoft.AspNetCore.Builder.IApplicationBuilder UseRequestTimeouts (this Microsoft.AspNetCore.Builder.IApplicationBuilder builder);
文档中指出:应用可以选择性地对请求应用超时限制。 ASP.NET Core服务器默认不执行此操作,因为请求处理时间因方案而异。 例如,WebSocket、静态文件和调用昂贵的 API 都需要不同的超时限制。 因此,ASP.NET Core提供了中间件,用于配置每个终结点的超时以及全局超时。
文档地址:https://learn.microsoft.com/zh-cn/aspnet/core/performance/timeouts
让我们期待.NET 8的正式版
在不使用反向代理的情况下,你可以通过在 ASP.NET Core Web API 应用中配置 Kestrel 服务器的超时时间来实现你的期望。
要设置 Kestrel 服务器的超时时间,你需要在应用的 Program.cs 文件中的 CreateHostBuilder 方法中进行配置。以下是一个示例:
csharp
Copy code
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((hostingContext, options) =>
{
options.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(30); // 设置请求头超时时间
options.Limits.KeepAliveTimeout = TimeSpan.FromSeconds(30); // 设置保持连接超时时间
});
});
}
在上述示例中,ConfigureKestrel 方法用于配置 Kestrel 服务器的选项。通过设置 RequestHeadersTimeout 和 KeepAliveTimeout 属性,你可以定义请求头超时时间和保持连接超时时间,以满足你的需求。在示例中,这两个属性都被设置为 30 秒。
这样配置后,当你的接口在指定时间内没有完成工作时,Kestrel 服务器将自动以 504 状态码响应。
注意:这只会影响 Kestrel 服务器的超时时间,如果有其他中间件或服务层也有超时设置,可能需要额外处理。
感谢您的回答,按照您的设置,没有达到我预期的效果,您有时间可以在github上写一个完整的示例吗,再次感谢