程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.net 頁面被關閉後,服務器端是否仍然執行中?

ASP.net 頁面被關閉後,服務器端是否仍然執行中?

編輯:關於ASP.NET

問題:當一個正在執行中的ASPX頁面執行到一半的時候,浏覽器中你關閉了這個頁面,服務器端對應的這個頁面的代碼仍然在執行麼?

答案:除非你代碼裡面做了特殊判斷,否則仍然正在執行。

注意點:

1、客戶端顯示頁面的時候,後台已經執行完了的頁面對象早已經不存在了。當然這時候談不上服務器段執行不執行的問題了。

2、頁面還沒有返回,處於等待狀態的時候。關閉ASPX頁面,才會涉及到上面提到的服務器端仍然在執行的情況。

3、客戶端關閉的時候根本不向服務器發送指令。

4、除非你代碼裡面做了特殊判斷,這裡的特殊判斷指用 if(!Response.IsClientConnected) 來檢測狀態而用代碼終止運行。

下面的簡單代碼就是演示關閉頁面後,看是否仍然在執行?

你可以在這個頁面打開後, 還沒有返回任何信息的時候把這個頁面關閉,然後看指定目錄下是否有對應文件被創建並填寫內容。

protected void Page_Load(object sender, EventArgs e)
     {
       StringBuilder txt = new StringBuilder();
      txt.AppendLine();
       txt.AppendLine(DateTime.Now.ToString("u"));
       txt.AppendLine("asvd");
      Response.Write(DateTime.Now.ToString("u"));
       Response.Write("\r\n");
       Thread.Sleep(50000);
       txt.AppendLine(DateTime.Now.ToString("u"));
       Response.Write(DateTime.Now.ToString("u"));
       Response.Write("\r\n");
// 把一些信息寫到另外一個文件,借此察看是否正在運行
       string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");
       if (!Directory.Exists(dir))
         Directory.CreateDirectory(dir);
       DateTime dt = DateTime.Now;
       string shortfileName = string.Format("errors_{0:0000}{1:00}{2:00}.log", dt.Year, dt.Month, dt.Day);
       string fileName = Path.Combine(dir, shortfileName);
      StreamWriter sw;
       if (File.Exists(fileName))
         sw = File.AppendText(fileName);
       else
         sw = File.CreateText(fileName);
      sw.Write(txt.ToString());
       sw.Close();
       sw = null;
    }

作了特殊判斷的情況簡單例子:

注意: IsClientConnected 的判斷在 VS.net 開發工具自帶的開發站點 ASP.NET Development Server 是不支持的。ASP.NET Development Server 永遠返回 true 。

IIS 才是支持的。

protected void Page_Load(object sender, EventArgs e)
     {
      StringBuilder txt = new StringBuilder();
      for (int i = 0; i < 100; i++)
       {
         if (this.Response.IsClientConnected)
         {
           txt.AppendLine();
           txt.AppendLine(DateTime.Now.ToString("u"));
           txt.AppendLine(i.ToString());
Response.Write(DateTime.Now.ToString("u"));
           Response.Write("\r\n");
           Thread.Sleep(500);
         }
         else
         {
           Response.End();
           return;
         }
       }
      txt.AppendLine(DateTime.Now.ToString("u"));
       Response.Write(DateTime.Now.ToString("u"));
       Response.Write("\r\n");
      // 把一些信息寫到另外一個文件,借此察看是否正在運行
       string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");
       if (!Directory.Exists(dir))
         Directory.CreateDirectory(dir);
       DateTime dt = DateTime.Now;
       string shortfileName = string.Format("errors_{0:0000}{1:00}{2:00}.log", dt.Year, dt.Month, dt.Day);
       string fileName = Path.Combine(dir, shortfileName);
      StreamWriter sw;
       if (File.Exists(fileName))
         sw = File.AppendText(fileName);
       else
         sw = File.CreateText(fileName);
      sw.Write(txt.ToString());
       sw.Close();
       sw = null;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved