HttpRuntime ExecutionTimeout & IIS Site ConnectionTimeout 差異
What is the difference between httpRuntime executionTimeout and IIS Site connectionTimeout?
前言
最近在公司協助解決問題時,碰到一個問題描述為「前端發 Request 1分鐘後就會回傳失敗」且是在客戶環境,聽到的狀況是 Response 回傳 Http status 為 504,所以就有初步懷疑可能是客戶網路有什麼限制…
不過當然身為工程師,還是得要窮盡可能去嘗試看看自己是否有哪邊沒有做到位,於是乎我先把遇到的狀況同步給對方 IT 幫忙看看是否能排除問題…
回到主題,我一開始還真的不清楚 executionTimeout 和 connectionTimeout 的區別是什麼 Σ(゚Д゚;≡;゚д゚) 查了一些資料才比較明白…
👉 ExecutionTimeout
web.config > system.web > httpRuntime
有幾點可以特別注意:
- 長度限制為有號 32 位元。
- 可以決定 Server 端針對這一 Request 最大能處理的時間。
- Compilation 元素內的 debug 屬性會影響其生效。
- 因 .NET Framework 版本預設值會有差異。
實際小演練
debug = true
開發環境我不希望發生有執行逾時(Execution Timeout)的情況發生,所以 Compilation 元素內的 debug 屬性設為 True。
debug = false
測試環境我希望發生有執行逾時(Execution Timeout)的情況發生,所以 Compilation 元素內的 debug 屬性設為 False。
如果這個要求(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)
有幾點可以特別注意:
- 可以決定 client 與 server 建立的 TCP 連線在中斷前可保持非使用中的時間。(簡單說就是這條被建立的連線在非活耀狀態下可以持續的時間,過後則關閉連線)
- 描述三種狀況會被視為非活耀連線狀態
- 預設為 120 秒(2 分鐘)
參考來源
💭 Default Limits for Web Sites <limits>
結尾
感謝各位花時間看完此篇小文,如果本文中有描述錯誤,還請各位指教。
希望大家對於 executionTimeout 及 connectionTimeout 的定義可以做出區別並有初步認識,兩者並不是指同一件事情哦…
謎之聲:這個不是看英文就知道了(´・_・`)?
我:…