前言

最近在公司協助解決問題時,碰到一個問題描述為「前端發 Request 1分鐘後就會回傳失敗」且是在客戶環境,聽到的狀況是 Response 回傳 Http status 為 504,所以就有初步懷疑可能是客戶網路有什麼限制

💭 504 Gateway Timeout Error

不過當然身為工程師,還是得要窮盡可能去嘗試看看自己是否有哪邊沒有做到位,於是乎我先把遇到的狀況同步給對方 IT 幫忙看看是否能排除問題…

回到主題,我一開始還真的不清楚 executionTimeout 和 connectionTimeout 的區別是什麼 Σ(゚Д゚;≡;゚д゚) 查了一些資料才比較明白…

. . .

👉 ExecutionTimeout

web.config > system.web > httpRuntime

web.config
web.config
Microsoft Docs
Microsoft Docs

有幾點可以特別注意:

  1. 長度限制為有號 32 位元。
  2. 可以決定 Server 端針對這一 Request 最大能處理的時間。
  3. Compilation 元素內的 debug 屬性會影響其生效。
  4. 因 .NET Framework 版本預設值會有差異。

實際小演練

debug = true

web.config
web.config

開發環境我不希望發生有執行逾時(Execution Timeout)的情況發生,所以 Compilation 元素內的 debug 屬性設為 True。

debug = false

web.config
web.config

測試環境我希望發生有執行逾時(Execution Timeout)的情況發生,所以 Compilation 元素內的 debug 屬性設為 False。

Logged message
Logged message

如果這個要求(Request)在 Server 超過 executionTimeout 所設置的時間,則會回傳 Http status 500 給前端。

參考來源

💭 httpRuntime Element (ASP.NET Settings Schema)

💭 compilation Element (ASP.NET Settings Schema)

💭 ASP.NET MVC 開發心得分享 (22):關於 executionTimeout

. . .

👉 ConnectionTimeout

IIS 網站(Site) > 進階設定(Advanced Settings) > 連線限制(Connection Limits)

IIS
IIS
Microsoft Docs
Microsoft Docs

有幾點可以特別注意:

  1. 可以決定 client 與 server 建立的 TCP 連線在中斷前可保持非使用中的時間。(簡單說就是這條被建立的連線在非活耀狀態下可以持續的時間,過後則關閉連線)
  2. 描述三種狀況會被視為非活耀連線狀態
  3. 預設為 120 秒(2 分鐘)

參考來源

💭 Default Limits for Web Sites <limits>

💭 [IIS][ASP.net] 連線逾時,Session Timeout的設定

💭 HTTP keep-alive連線

. . .

結尾

感謝各位花時間看完此篇小文,如果本文中有描述錯誤,還請各位指教。

希望大家對於 executionTimeout 及 connectionTimeout 的定義可以做出區別並有初步認識,兩者並不是指同一件事情哦…

謎之聲:這個不是看英文就知道了(´・_・`)?

我:…