**等待數分鐘仍出現*瀏覽器出現無法顯示網頁**?!)
****>按完-->某個按鈕後超過五分鐘才會有回應的網頁))
***( 註: 屬錯誤示範*)改善方式請參考 ( 耗時Stored Procedure的ASP.NET Postback ---
---進度回報寫法 ),在測試台測試OK,移到正式台後,按鈕後五分鐘就會---
----出現無法顯示網頁錯誤?!))
***(
((
---封包往來,很快找到原因: **
***可看到300秒後Server端抛回一個TCP封包,
紅框中的R為TCP RST Flag,表示伺服器端要求中止連線**) /
***在IE接到此封包的時間,則好就是彈出無法顯示網頁的時機,
一秒不差*)>
***把同樣實驗搬回本機VM,等待時間即使拉長到7分鐘,
也不會有連線中斷狀況*
))資訊最後一點,從正式機同網段以IE測試不會出現逾時。
推測問題出在Client與正式台間的網路設備,而該負載平衡設備
曾有強切Oracle Session的前科 >/ ***
***
ASP.NET網站伺服器遷移後,查詢Oracle資料庫時偶爾會----出現"ORA-12571: TNS:封包寫入器失敗(TNS:packet writer failure)",
但重新整理網頁後則又正常。
Oracle.DataAccess.Client.OracleException.HandleErrorHelper
(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlVarCtx* pOpoSqlVarCtx, Object src, String procedure) at Oracle.DataAccess.Client.OracleCommand.ExecuteReader
(Boolean requrey, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleCommand.
經爬文發現此錯誤多屬網路傳輸層次問題,多因網路品質、
傳輸設備、防火牆... 等因素導致與Oracle伺服器網路連線---
---發生中斷引起。而新近ASP.NET伺服器環境的主要變動是--
--納入負載平衡設備(Load Balancer, NLB)管轄,
因此與Oracle資料庫的連線預設也會經過NLB設備,
有可能是造成問題的原因。
試著將伺服器移出NLB,問題就消失了;配合網管人員由NLB觀察,
確認NLB的Session管理機制會導致Oracle連線Session中斷
(但SQL Server的連線則不會)。
將Oracle連線排除在NLB管理範圍外,問題排除 ~!*))
***(((最後的疑問,為什麼Chrome不會出錯 ? 就用Firefox、IE、
Chrome的封包分析來說明吧 !)
**Firefox*
**
**Chrome**
只會靜待HTTP Response回傳資料,而Chrome不同,
在等待期間每隔45秒就會丟出一個TCP Keep Alive封包 *)
***依我推測,每45秒一次的TCP Keep Alive活動讓網路設備--
---認定該連線仍在活動中,免除被強制斷線的命運 *))>
***~而修改測試ASP.NET網頁,每一分鐘以Response.Flush()方式_----
------抛回一個字元,IE/Firefox便不會在五分鐘時出錯 ))>/
**至此,謎團都解開~!!**
**這個案例的建議是: 修改ASP.NET程式****
***加入耗時Stored Procedure的ASP.NET Postback進度回報寫法 ***
***如此等待過程使用者能持續收到進度回饋改善使用體驗***>
****))也不會讓網路設備
)>
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&