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的代碼層面,通過在項目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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM