zoukankan      html  css  js  c++  java
  • 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=".logsstdout" 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的代码层面,通过在项目Program.cs文件中添加.UseKestrel(...)BuildWebHost方法中,来设置KeepAliveTimeout属性的值,从而设置请求的超时时间,可以结合上面介绍的web.config中的requestTimeout属性来一起做设置。

    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();
  • 相关阅读:
    PHP字符串
    PHP第四章数组2
    oop soa cbd
    spring 时间组件
    IReport 常见问题整理
    maven 与 jenkins 集成的时候,打包出现错误处理
    Mybatis 传递参数中的_paramter 的理解
    JS 之表单特殊控制
    JQuery 中设置AJAX 的全局函数
    spring + ehcache 整合
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10307882.html
Copyright © 2011-2022 走看看