• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

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();

详情可以查看:

Keep-alive timeout

 

posted @ 2019-01-23 11:24  PowerCoder  阅读(16965)  评论(4)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3