我知道我們需要一個更好的解決方案,但我們現在需要以這種方式完成此項任務。當您點擊aspx網頁上的開始導入按鈕時,我們有一個很長的導入過程。這需要很長時間,有時幾個小時。我改變了超時時間,這很好,但大約一個小時後我仍然收到連接服務器重置錯誤。我在想這是asp.net的生命週期,我想知道是否有IIS中的設置,我可以改變這個生命週期。ASP.NET生命週期和漫長的過程
回答
您可以嘗試在新線程中運行該進程。這意味着頁面將啓動任務,然後完成頁面的處理,但單獨的線程仍將在後臺運行。您不能夠獲得任何視覺反饋,因此您可能需要將進度記錄到數據庫並將其顯示在單獨的頁面中。
你也可以嘗試運行此作爲Ajax調用,而不是它有不同的限制回傳...
既然你認識到這是不是這樣做的方法我不會列出所有的可能性。我確定你知道他們是什麼:)
延長超時絕對不是這樣做的方式。響應時間應該保持在絕對最小值。如果可能的話,我會嘗試將這個長期運行的任務完全從ASP.NET應用程序中移出,並將其作爲一個單獨的進程運行。
之後,你要如何繼續下去。您可能希望進程將其結果轉儲到ASP應用程序可以輪詢的文件中,無論是通過AJAX還是讓用戶點擊F5。
如果它採取小時,我會建議一個單獨的線程來此,或許通過電子郵件發送通知時,它已準備好從服務器下載的結果(即發送一個鏈接到最終結果)
,或者如果它在客戶端的瀏覽器中有一個用戶界面非常重要(如果他們將要停留n個小時),那麼可以使用SetInterval從客戶端調用WebMethod(JavaScript)來定期檢查它是否完成。
獨立線程是否也受到生命週期的影響,因爲我已將它放在單獨的線程中並且它仍然停留大約45分鐘。 – user204588 2010-01-10 05:59:34
後臺線程不應該受到頁面生命週期的影響,但它可能會受到asp.net回收的影響(請參閱我的新帖子) – 2010-01-10 13:43:24
初始頁面請求完成後,您的單獨線程將與任何請求斷開連接。當應用程序池回收或清理時,它會看到掛起的線程並終止它。 – ulty4life 2011-08-09 18:38:09
另外一個角度來考慮這或許可以解釋的行爲是ASPNET_WP.EXE回收,如果太多的內存被消耗如果你的漫長的過程佔用了(不與頁面生命週期相混淆)
內存太多ASP.NET將啓動一個新進程並重新分配所有現有的請求。我會建議檢查這個。您可以通過在aspnet_wp的任務管理器中查看並檢查正在使用的內存大小來做到這一點 - 如果大小已經回落,它已經回收了。
可以在machine.config中修改內存限制:
使用的memoryLimit指定允許的最大內存大小,系統內存總量的百分比工作進程,可以ASP.NET發佈之前消耗一個新的過程並重新分配現有的請求。 (默認爲60)
<system.web>
<processModel autoConfig="true" memoryLimit="10"/>
如果這是什麼原因造成你的問題,唯一的解決辦法可能是爲你的長期運行一個單獨的進程。您將需要相應地設置IIS以允許其他EXE獲得相關權限。
你應該幾乎可以肯定地做一個單獨的過程中的長期工作(不只是一個單獨的線程)。
編寫一個獨立程序來執行導入。讓它在某個地方(例如數據庫中的一列)設置一個標誌,並將行放入日誌文件或數據庫表中以顯示進度。
這樣你的頁面才能開始工作。之後,它可以每隔幾分鐘自我刷新一次,直到「完成」標誌被設置。如果您想確定它仍在運行並且沒有死亡,您可以顯示日誌表。
這是非常簡單的東西,但如果您需要代碼示例,則可以提供它們。
我會走得更遠,使它成爲一個NT服務。數據庫建議與Web服務器通信,沒問題,或者使用WCF。 – 2010-04-13 04:15:01
如果這是一個很少運行的進程,並在完成時退出,我不確定服務的優勢是什麼。 – egrunin 2010-04-13 04:29:22
- 1. ASP.NET應用程序生命週期 - 非頁面生命週期
- 2. asp.net 2.0生命週期事件和asp.net 3.5生命週期事件的差異
- 3. Asp.Net MVC生命週期
- 4. ASP.NET MVC ViewPage生命週期
- 5. asp.net頁面生命週期
- 6. ASP.NET生命週期開始
- 7. ASP.net頁面生命週期
- 8. asp.net頁面生命週期
- 9. ASP.NET HttpApplication生命週期
- 10. Asp.NET Global.asax - 應用程序生命週期
- 11. ASP.NET會話和頁面生命週期
- 12. HTTPModules和Global.asax - ASP.NET頁面生命週期
- 13. 線程的生命週期
- 14. Android活動生命週期與流程生命週期
- 15. GWT生命週期流程
- 16. Android - 流程生命週期?
- 17. 線程池和對象生命週期
- 18. asp.net的MVC頁生命週期事件
- 19. 關於asp.net生命週期的問題
- 20. 生命週期和廣播
- 21. oledbtransaction和oledbconnection生命週期
- 22. Android和生命週期
- 23. RemoteCache,RemoteCacheManager和生命週期
- 24. WCF,Ninject和生命週期
- 25. itextsharp和生命週期
- 26. Asp.net MVC頁面生命週期
- 27. ASP.net頁面生命週期問題
- 28. ASP.NET頁面生命週期解釋
- 29. Asp.net頁面生命週期錯誤,
- 30. 問題與頁面生命週期(asp.net)
http://stackoverflow.com/questions/118261/long-running-code-within-asp-net-process – 2010-05-04 01:55:26