2009-08-21 86 views
2

我們將Web服務作爲網站項目運行。客戶請求在幾秒鐘後返回,但產生一個應該運行數小時的線程。該線程發出Web請求並寫入數據庫,並通過Thread.Sleep調用進行遏制。ASP.NET 2.0網站獲取ThreadAbortException

運行了幾個線程運行約20分鐘後,所有線程同時收到一個ThreadAbortException。 Thread.resetAbort沒有幫助。 SQL調用期間,Web請求期間或Thread.Sleep期間可能發生異常。

我認爲這個問題可能是web.config中的httpRuntime屬性executionTimeout,但這並沒有解決問題。

任何其他想法可能會殺死我們所有的線程?

+0

你看看你的會話超時?我猜測這些線程是由會話而不是應用程序擁有的,因此可能會受到該超時的限制。 – 2009-08-21 17:15:45

+0

好想法,但我們沒有使用會話。 – 2009-08-21 17:21:58

回答

2

IIS中的應用程序池有空閒超時。它需要關閉。

(管理工具> IIS。右鍵單擊該應用程序池>性能。性能選項卡。)

3

我猜測Web應用程序擁有該線程,並在一段時間後關閉應用程序。

如果我構建類似這樣的東西,我會編寫一個Web服務,將您的客戶端請求放到數據庫中,然後編寫一個Windows服務,爲客戶端請求輪詢該數據庫並生成線程它可以做任何你需要的東西(使網絡請求和寫入數據庫)。這聽起來像是你寫了某種處理器引擎,我不認爲一個asp.net應用程序是舉辦這種事情的好地方。

+0

同意。我不控制這個項目的架構,但這些問題對於這個論點來說是很好的燃料。 – 2009-08-21 17:30:49