《ASP.NET AJAX 經典講座》(以下均以「本書」稱之)第 3 章的圖 3-1 是非同步呼叫逾時的時候出現的訊息,這裡就來寫個簡單的測試程式,實際跑看看逾時的時候是否真的會出現這個訊息。

步驟

  1. 從 Visual Studio 2005 中開啟既有的 AJAX-enabled 網站,在網站中加入一個新網頁,命名為 TimeoutDemo.aspx。
  2. 從 Toolbox 拉一個 ScriptManager 和 UpdatePanel 至網頁上。
  3. 從 Toolbox 拉一個 Button 伺服器控制項至 UpdatePanel1 面板區域內。
  4. 雙擊 Button1 以撰寫 Click 事件處理常式,程式碼如下:
     
        protected void Button1_Click(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(5000);
        }
        
    這裡用 Thread.Sleep 方法模擬伺服器端需要 5 秒的處理時間。
  5. 由於 ScriptManager 的預設逾時時間是 90 秒,為了讓程式出現逾時的狀況,因此還要將 ScriptManager1 的 AsyncPostBackTimeout 屬性改成小於 5 秒。就改成 3 秒吧。
  6. 在瀏覽器中檢視 TimeoutDemo.aspx,然後點網頁中的按鈕。經過三秒之後,你就會看到如本書圖 3-1 所顯示的訊息("The server request timed out")。

這個練習非常簡單,並沒有什麼特殊的技巧,若要說有什麼需要注意的地方,應該就只有 timeout 時間該設多少才恰當。基本上這並沒有一個固定的答案,由於每個網頁上只能有一個 ScriptManager,因此你得根據該網頁在處理各個 request 時的最長處理時間,同時考慮網路流量尖峰時期造成的延遲,來決定網頁的適當 timeout 時間。

另外要提醒的是,當網頁 timeout 時,只是在用戶端片面終止後續的處理,原本在伺服器端執行中的作業並不會因此停掉,而是會繼續執行,直到其作業處理完畢。