2013-04-10 103 views
0

我想弄清楚我的應用程序是否在Web服務器中運行。現在我們從Visual Studio知道您可以在本地主機上運行應用程序,並且可以停止它。上傳到Web服務器時,asp.net web應用程序是否仍然運行?

的情況是,在我的應用程序,我已經在那裏上Application Start定義一個Timer 2分鐘,然後執行Sub其發送電子郵件Global.asax

我的問題是,如果用戶請求Main.aspx然後Global.asax啓動,並Global.asax都要重新啓動每一個用戶請求Main.aspx時間?或者它是否保持了2分鐘的時間間隔是否調用Main.aspx或閒置?在其他方式根據這篇文章的標題每當用戶離開Web應用程序,按照Visual Studio stop按鈕,Main.aspx停止嗎?如果是這樣,Global.asax受到影響或停止?

有什麼想法?

回答

0

據我瞭解,默認情況下IIS會關閉(回收)該站點所連接的工作池,如果該訪問池未被訪問超過20分鐘。這個設置可以改變,並有一些工具可以幫助保持網站「活着」。

Global.asax文件中的Application_Start中的代碼只會在應用程序啓動並加載到池中時觸發一次。訪問網站上的任何頁面不會再次觸發它。當池被回收並且請求頁面時,應用程序將再次啓動並且Application_start將被觸發。

我不確定的是如果您設置的計時器將保持應用程序活着。我的猜測是不會的。

編輯:

定時器不會保持網站的活着,這可能是幫助(從http://www.west-wind.com/weblog/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay-alive

public void PingServer() 
    { 
     try 
     { 
      WebClient http = new WebClient(); 
      string Result = http.DownloadString(App.Configuration.PingUrl); 
     } 
     catch (Exception ex) 
     { 
      string Message = ex.Message; 
     } 
    } 

,而在申請退出呼叫

void Application_End(object sender, EventArgs e) 
{ 


    // Force the App to be restarted immediately 
    new YourClassName().PingServer(); 
} 

這種方法的問題是計時器不準確,因爲當池試圖回收再開始時它將被丟棄獲得。

0

一般來說,在Web應用程序中使用定時器是一個壞主意。原因是你永遠不知道IIS何時決定回收應用程序池工作線程。另外,定時器很可能是全局性的,而不是用戶特定的,所以你不能使用Session或其他用戶特定數據。

如果你需要運行一個任務,那麼你應該創建一個windows服務來完成這個任務。

1

除了@ GJKH的回答是:

如果您正在運行IIS 7.5或8,那麼你就可以打開在配置applicationhost.config始終開啓選項。

在啓動模式的應用程序池設置中的IIS中,將其設置爲始終運行。

enter image description here

相關問題