2012-05-02 32 views
0

我有一個複雜的操作,需要很長時間才能運行。查看未呈現長時間請求,但控制器代碼已執行

如果它針對一小部分數據運行,它將完美工作,並生成所需的頁面。

如果我使用大量數據並且處理時間超過幾分鐘,該頁面仍然顯示爲在客戶端計算機上請求,但我們知道(通過堆棧跟蹤)我是正確的「返回查看(模型);」。

任何想法,爲什麼會發生這種情況?我完全喪失了。我已經將每次超時延長到幾個小時(包括任何可用於應用程序池的時間)。

這不能成爲一個瀏覽器問題,因爲它已經在Chrome,IE,Safari和Firefox中的幾個不同的Windows PC上嘗試過。

編輯

這發生在多個地方在完全不同的事情都發生在應用程序。但是所有代碼都是爲兩者執行的。

+0

OutOfMmeory excepetion由於過大的結果?或者你是否在服務器端看到任何異常? (即調試並關閉「僅限我的代碼」,並在拋出CLR異常時關閉異常 - >中斷)。 –

+0

沒有任何異常:( – rashleighp

+0

瀏覽器中沒有錯誤(ie..404 ...或500錯誤)?你只是回答了這個問題忽略。 – twaldron

回答

2

在調用View(model)之前,您的模型是否實際上具有所有預期的數據?

如果在任何IQuerable或IEnumerable屬性上調用ToList(),它是否會返回預期的數據?

你將不得不張貼更多的代碼去進一步。


編輯:

仍然沒有足夠的信息去,但這裏有一些更多的調試技巧。

你的路徑是瀏覽器 - > Web服務器 - >數據庫

如果你確信你調用視圖(模型),所有的數據都在模型對象被物化之前,那麼你可以假設問題不在於webserver - >數據庫連接。

因此,如果這個問題是瀏覽器之間 - > Web服務器,這裏有一對夫婦更多的可能性:

  • 你提一個大企業的系統:是否有任何涉及代理?你可以用直接連接進行測試嗎?

  • 有什麼東西被返回到瀏覽器呢?你能telnet到Web服務器的80端口併發出請求嗎?你有什麼回來嗎?

  • 如果你監視瀏覽器進程,它是否在做什麼?使用procexp,你可以看到每個線程正在做什麼 - 瀏覽器空閒,還是使用CPU &吞噬內存?

  • 是否有任何其他進程可能攔截請求?某些防病毒產品可能會阻止某些頁面呈現。你能禁用防病毒並查看是否有任何改變?

  • 你有沒有試過監視服務器,看看發生了什麼?處理是否正在發生(大概內存使用量也會增加)?

+0

+1。一步,它可能是一個好主意,只是'返回新的EmptyResult();'看看是否有幫助 - 可以縮小問題 –

+0

一切都正確返回。它不是一個代碼問題,因爲它發生在兩個不同的p只有當請求需要很長時間時(如果請求需要幾分鐘或更少的時間,它可以正常工作),就會發生代碼非常不同的花邊。我已經花了3天的時間尋找代碼問題,並且確定沒有代碼問題。 – rashleighp

+0

謝謝,你的建議真的有幫助。最後,我們把它移到了https(無論如何我們會這樣做),並通過不同的端口,它工作正常! – rashleighp

0

IIS有一個處理超時。一旦達到,無論處理管道處於哪個階段,處理線程都會被終止。嘗試增加web.config中指定的處理超時時間:

<httpRuntime executionTimeout="90" /> 

有關更多詳細信息,請參閱MSDN。請注意,此限制適用於所有頁面,因此如果沿着此路線走,請小心。

+0

你的意思是空閒timout?我不能在IIS幫助或網頁上找到對處理超時的任何其他引用,如果是這樣,它已經設置爲2小時(問題發生在8分鐘後) – rashleighp

+0

已設置爲14400(4小時) – rashleighp

1

你可能會完全考慮了不同的設計:

  1. 客戶端提交作業服務器
  2. 服務器啓動長時間運行的操作的後臺處理
  3. Server返回作業ID客戶
  4. 客戶端使用工作id來定期查詢服務器的作業狀態
  5. 作業完成後,客戶端將結果以HTML或數據(例如JSON)的形式請求紅。
+0

我想同意這是一個好主意,我們已經談到了做類似的事情,但這是一個大型的實時企業系統,所以它需要大量的時間和工作(並且我們處於危機模式下) – rashleighp

0

雖然我還沒有看到你的代碼,我的猜測是嘗試使用異步控制器(有或沒有,通過AJAX :-)所取得的請求,因爲,很明顯,是一個長期運行任務或許你還可以優化處理一些並行處理,以減少時間: 這裏是一個很好的起點 http://msdn.microsoft.com/en-us/library/ee728598.aspx

相關問題