WebRequest + Https + 憑証錯誤 = 作業逾時
前言
一般的系統一登入時,都會顯示公告訊息,我們的系統也是! 因為系統效能問題,所以就幫忙看了程式。發現,每次登入時,都會到DB取公告資料,但公告並不會因為個人而有所不同,是針對整個系統的呀! 所以就建議將資料放到Application之中,然後在維護公告的那支程式中,再去將放在Application中的公告資料給清掉。
但是因為我們的系統有4台Web AP做Load Balance,所以會導致只有操作維護公告那台Web AP會被清掉,其他3台還是舊的資料。
實作
有想到2種方式,1是公告調整時,再去寫For各AP的一個Flag,然後各AP去讀取它,然後再Update那個Flag。2是公告內容調整時,要呼叫各AP把資料把Application清掉。
因為原本的效能問題就是因為DB太累了,所以就使用第2種方式,呼叫各Web AP的一支程式來做。
Dim strURL as string = "http://MySystem/ResetAP.aspx" Dim req as System.Net.WebRequest = System.Net.WebRequest.Create(strURL) req.Timeout = 500 Dim rsp as System.Net.HttpWebResponse = Ctype(req.GetResponse(), System.Net.HttpWebResponse) rsp.close Response.Write("OK!")
在公司測試都OK,但是上到了客戶端卻發生了「作業逾時」的錯誤,請User直接在Web AP上直接Run ResetAP.aspx,User說是可以Run的呀! 奇怪!
於是直接到客戶端去看,原來是因為https時,憑証有問題,它會先問User要不要繼續下去。當使用程式去Run時,沒有人去按,所以它就會一直卡在那裡,就作業逾時了!
知道這個原因後,程式中就改用http,避掉這個問題