為了進行一些效能實驗,我試著要將ScriptTimeout的時間縮短,並故意用Thread.Sleep來製造Timeout。

   1:  protected void Page_Load(object sender, EventArgs e)
   2:  {
   3:      //Set ScriptTimeout = 5 sec
   4:      Server.ScriptTimeout = 5;
   5:      //Sleep 20 seconds
   6:      System.Threading.Thread.Sleep(20000);
   7:      //Write log
   8:      using (System.IO.StreamWriter sw = 
   9:          new System.IO.StreamWriter("d:\\temp\\bench.log", true))
  10:      {
  11:          sw.WriteLine(
  12:              string.Format("{0:yyyy-MM-dd HH:mm:ss.fff}",
  13:              DateTime.Now
  14:          ));
  15:          sw.Close();
  16:      }
  17:      Response.Write("Done!");
  18:      Response.End();
  19:  }

 測試發現,將Server.ScriptTimeout設成5秒無法造成Timeout Exception,後來我又試著修改web.config的<httpRuntime> executionTimeout Attribute,仍然無效。

Google到這篇文章,MS Online Support給了頗為詳細的說明,解開了謎團:

1) <compliation debug="true" />時,ScriptTimeout設定會被忽略。
2) 當Timeout小於1分鐘時,實際上將Delay 5-15秒,也就是說executionTimeout=5,實際上可能要15秒才算Timeout。
3) Server.ScriptTimeout是ASP時代的遺跡,屬於COM Interface,不建議使用,在ASP.NET中要設定Timeout時間請改用web.config 的<httpRuntime> executionTimeout屬性。


Comments

# by steve

>當Timeout小於1分鐘時,實際上將Delay 5-15秒,也就是說executionTimeout=5,實際上可能要15秒才算Timeout 感謝大師 到Google上找答案,找到這裡來了....... Keyword:Server.ScriptTimeout

# by derek

确实如此,不过不一定是小于1分钟,大于也会有延迟,没查到也没想到是什么原因,奇怪.....

# by Will 保哥

事實上是 ASP.NET Web Form Framework 在檢查 executionTimeout 時是有一個每 15 秒執行一次的 Timer 在運作著,每15秒才會觸發一次是否 Timeout 的檢查。

# by y

y

Post a comment