ASP.NET Core如何设置请求超时时间
如果一个请求在ASP.NET Core中运行太久,会导致请求超时,目前ASP.NET Core对请求超时的设置比较麻烦,本文列出目前收集到的一些方法,供大家参考。
部署ASP.NET Core到IIS的设置方法
如果你的ASP.NET Core项目是部署在IIS上的,那么可以在ASP.NET Core项目发布后生成的web.config文件中,进行如下设置:
<?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>
通过添加aspNetCore节点和设置requestTimeout属性,可以将请求的超时时间设置为你想要的值,上面就设置为了20分钟。
虽然不知道requestTimeout的最大值可以设置到多少,但是试了下设置到100小时30分钟是没有问题的
requestTimeout="100:30:00"
如果一个Http请求100小时都还没执行完那也是可以了。。。但是也不要把requestTimeout设置得非常大(例如1000小时),那样IIS会报错。
在Visual Studio中使用IIS Express调试时的设置方法
一般在使用Visual Studio调试ASP.NET Core时,我们都会选择IIS Express作为Web服务器,下面就介绍下如何在IIS Express中设置web.config文件的超时时间。
在Windows任务栏上选中IIS Express:
右击IIS Express图标,选择Show all applications:
在弹出的窗口列表中,选中你要更改超时时间的application,然后点击底部的Config链接,这样会打开站点的applicationhost.config文件。
然后在aspNetCore节点上应用requestTimeout属性即可:
requestTimeout="00:20:00"
例如:
<system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" requestTimeout="00:20:00" stdoutLogEnabled="false" /> <httpCompression> <dynamicCompression> <add mimeType="text/event-stream" enabled="false" /> </dynamicCompression> </httpCompression> </system.webServer>
最后保存applicationhost.config文件即可。
部署ASP.NET Core到Kestrel,在代码层面设置超时时间
如果你的ASP.NET Core项目是部署在Kestrel上的,可以在ASP.NET Core的代码层面,通过在项目Program.cs文件中添加.UseKestrel(...)到BuildWebHost方法中,来设置KeepAliveTimeout属性的值,从而设置请求的超时时间。
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(option => { option.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20); option.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20); }) .Build();
详情可以查看:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2016-01-23 SQL SERVER: 合并相关操作(Union,Except,Intersect) - 转载