2012-01-01 50 views
2

我想應用程序狀態和會話狀態是兩個不同的東西。Asp.net應用程序狀態到期

如果我可以設置到會話狀態的到期時間,我可以做我的web.config中的應用程序狀態相同嗎?

我只是想阻止我的應用程序在5分鐘後重建。

我不知道到底發生了什麼。首次訪問該網站時,該網站需要10秒纔會顯示。如果我在5分鐘之前返回該網站,該網站立即出現。如果超過5分鐘不活動,當我再次訪問該網站時,該網站需要10秒。我想這是應用程序狀態誰過期了?

+1

你的意思是你的應用程序「 5分鐘後重建「?請詳細解釋這意味着什麼。 – Oded 2012-01-01 17:52:17

回答

2

我知道讓網站保持活躍狀態​​的最簡單方法是確保流量始終通過。如果您有權訪問計劃的作業運行者,請每分鐘或每兩秒鐘ping一個虛擬aspx頁面 - 這樣,您的應用程序應無限期運行。

如果沒有,有技巧來欺騙系統。您可以構建緩存項目,並在該緩存項目到期時創建另一個緩存項目。這將永久保持運行代碼每X分鐘,這將保持應用程序活着。問題是,如果應用程序永遠不會死(服務器重啓,IIS重啓等),那麼應用程序將會死機,直到有人發出真正的請求,此時它將再次無限期地保持活動狀態。

此技術有時用於模擬ASP.NET中的任務調度程序。請記住,這並不完美。

編輯:爲了澄清,你不會創建一個新的緩存項目,你實際上向一個頁面發出請求,然後創建緩存項目。這可以確保通過IIS進行另一個請求,而IIS則運行整個生命週期,使應用程序保持活躍狀態​​。

即使您確實將會話超時設置爲高,也不能保證它會保持。我已經處理了託管公司,他們會在幾分鐘不活動之後回收您的應用程序池,從而導致您可能已經打開的任何會話中斷。他們不關心你可能會開放會議 - 他們只是試圖擠壓每個CPU週期,他們可以從他們的服務器。因此,如果您使用的是共享主機,則可能需要記住這一點 - 您可能無法控制他們多久會殺死您的應用。

0

應用程序狀態從第一個會話創建時開始,並在上次會話過期後自動結束。只要您繼續訪問該網站,該應用程序將保持活動狀態。

我不知道你的意思是應用程序「重建」。更改任何相關文件(即帶有可編譯代碼的文件)將導致應用程序重新編譯(如果您有Web目錄)或重新加載(如果您有Web應用程序)。此操作將始終結束所有會話並結束應用程序。

+0

我添加了一些解釋 – Sebastien 2012-01-01 18:14:39

+0

好吧,如果您的會話超時時間爲5分鐘,那麼在最後一次訪問後5分鐘,會話將過期,應用程序將卸載。在此之後的第一次新訪問中,應用程序必須重新加載並且需要一些時間。會話的默認超時時間爲20分鐘,除非您有理由更改該時間,否則我會建議保持獨立。你是否在Global.asax.vb(或.cx)的Application_Start事件上執行任何代碼?每次應用程序啓動時都會執行。另外,您使用的是哪個版本的IIS? – 2012-01-01 18:20:15

+0

順便說一下,你可以使用sessionState標籤在system.web節中控制web.config中的超時時間: 2012-01-01 18:24:05

-2

您可以在配置文件中配置會話狀態以防止此過期。 例如:

<sessionState 
      mode="SQLServer" 
      sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>" 
      cookieless="false" 
      timeout="20" 
    /> 
+0

問題在於你在回答問題並詢問應用狀態:「如果我可以將到期時間設置爲會話狀態,我可以在web.config中對應用程序狀態執行相同操作嗎?「 – 2017-05-03 07:31:14

0

不確定它仍然是實際的。

該問題未與SessionState或ApplicationState關聯。

爲了避免您的網站的反應速度慢,你必須激活AlwaysRunning您的IIS 的模式,要做到這一點添加到您的web.config下一

<applicationPools> 
    <add name="MyAppWorkerProcess" startMode="AlwaysRunning" /> 
</applicationPools>