2013-07-19 48 views
0

我有一個asp.net網頁,其中按鈕點擊事件過程運行35分鐘,在前端我使用ajax並顯示進度條圖像。如果進程(按鈕點擊事件)在30分鐘內完成,則頁面重新加載成功,否則「進行中」圖像即使在處理完成後仍持續顯示,直到AsyncPostBackTimeout(設置爲60分鐘),並顯示服務器60分鐘後超時問題。 請讓我知道是否有什麼我做錯了。30分鐘後asp.net頁面沒有響應

+0

35分鐘到底做了什麼?我期望ASP.NET事件處理程序不是執行這種長時間運行代碼的合適位置。 –

+2

你正在做你的服務器端代碼錯誤。沒有網絡請求應該等待三十五分鐘。把你的工作分成幾個塊,或者使用[comet](http://en.wikipedia.org/wiki/Comet_%28programming%29)或類似的東西。 –

+1

你的過程本身需要30分鐘是錯誤的。你認爲用戶會在你的頁面上等待這麼久嗎? – Ehsan

回答

2

沒有看到你的代碼,我不能告訴你發生了什麼問題。不過,我可以推薦幾個選項:

  • 出把任務到多個步驟(而不是一個長鏈的任務)。對用戶來說可能會多一點工作,但至少他們不會在頁面上懸掛半小時+(哎喲!)。
  • 使用一個分析器來查看實際上需要這麼長時間,看看你是否不能優化代碼來減少進程。例如,如果是數據庫調用,那麼創建一個存儲過程而不是多個選擇/更新(數據來回執行)可能是有意義的 - 保留機器上的處理直到需要最終結果。
  • 對於長期任務,將流程分解爲服務或單獨的實體(並且只是將服務報告返回進度)可能是有意義的。例如MSMQ是一個非常好的方式,可以讓專門的服務運行並在需要時將任務傳遞給它。請記住,這現在創建了另一個層,這是另一個需要維護的地方。
0

如果一個過程需要30分鐘,明天可能需要60分鐘或更長時間,只是因爲您的服務器將忙於其他事情。這種做法從根本上說是錯誤的。

我的建議是將這麼長的任務放到另一個層面上,一個系統服務。該服務運行,從隊列中挑選任務,逐個執行。前幾層每隔幾秒鐘查看操作是否完成。或者更好的是,用戶不會等待,他們會做其他事情,並最終以某種方式告知他們長時間運行的任務已完成。