首页 新闻 会员 周边 捐助

在Asp.Net Core Web Api应用中,在不使用代理的情况下如何设置服务的超时时间

0
悬赏园豆:50 [待解决问题]

背景

Kestrel 是 ASP.NET Core 项目模板中默认包含和启用的 Web 服务器,在不使用反向代理的情况下,如何设置应用的超时时间

期望

我可以设置Kestrel的超时时间,当我的接口在指定时间内没有完成工作时,将自动以504状态码响应

三大神捕之四的主页 三大神捕之四 | 初学一级 | 园豆:55
提问于:2023-07-14 19:24
< >
分享
所有回答(2)
0

今天在查阅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的正式版

三大神捕之四 | 园豆:55 (初学一级) | 2023-07-15 00:37
0

在不使用反向代理的情况下,你可以通过在 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 服务器的超时时间,如果有其他中间件或服务层也有超时设置,可能需要额外处理。

Technologyforgood | 园豆:7775 (大侠五级) | 2023-07-15 07:23

感谢您的回答,按照您的设置,没有达到我预期的效果,您有时间可以在github上写一个完整的示例吗,再次感谢

支持(0) 反对(0) 三大神捕之四 | 园豆:55 (初学一级) | 2023-07-15 09:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册