ASP.NET 應用程式涉及多層逾時設定,層層疊加,任一層過短皆會導致長時間作業(大檔上傳、報表匯出、長時間 WebService 呼叫)中斷。以下系統整理三層關鍵設定。
Web.config:
<system.web>
<!--
maxRequestLength: 最大要求長度 (KB),預設 4096 (4MB)
executionTimeout: 要求執行逾時 (秒),預設 110 秒
-->
<httpRuntime
maxRequestLength="102400"
executionTimeout="600"
requestValidationMode="2.0" />
</system.web>
executionTimeout:ASP.NET 處理要求的最長秒數,**必須大於 IIS 連線逾時**,否則 IIS 先斷線。maxRequestLength:上傳檔案大小上限,單位 KB,範例設 100MB。Kestrel.Limits.MaxRequestBodySize 與 IISIntegration 設定。同步呼叫 WebService(舊式 ASMX 或 WCF)或 HttpWebRequest/HttpClient 時,需設定用戶端逾時:
// 舊式 WebService Proxy
MyService svc = new MyService();
svc.Timeout = 300000; // 毫秒 = 300 秒
// HttpClient (現代)
var client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(5); // 預設 100 秒
| 設定 | 位置 | 說明 |
|---|---|---|
| scriptTimeout | Server.ScriptTimeout / Page.AsyncTimeout | 頁面執行逾時,預設 90 秒,長時間非同步作業需調整 |
| sessionState timeout | Web.config <sessionState timeout="20"> | Session 閒置逾時 (分鐘),非要求執行逾時 |
| App Pool Idle Timeout | IIS 應用程式集區 → 進階設定 → 閒置逾時 | 預設 20 分鐘無要求則回收進程,導致首次請求慢 |
| requestLimits maxAllowedContentLength | Web.config <security><requestFiltering> | IIS 7+ 要求大小上限 (Bytes),預設 30MB,需大於 maxRequestLength |