2010-12-23 122 views
1

我有一個WCF服務託管在IIS中,需要很長時間(大約5小時)才能執行。 WCF服務基本上使用SSRS(SQL服務器報告服務)生成一些報告並將它們保存到服務器上的某個位置。這個服務實際上是在生成少量報告後停止的,所以我禁用了「工作進程的回收」,「空閒後關閉工作進程」和「限制內核請求隊列」,並修復了問題,所有報告都是無論生成它們的數量如何都會生成。但我不確定這是否是正確的解決方法,我想知道在IIS中的WCF服務的應用程序池中取消選中這些設置的影響是什麼?有沒有更好的方法來解決這個問題?禁用IIS應用程序池中工作進程的回收的影響

回答

5

對於任何長時間運行的進程,最好在IIS之外進行。

在這種情況下,我會有一個正在運行的監視請求隊列的Windows服務。當一個請求生成報告時,它會分離一個線程來執行生成。

Web服務將負責3件事。首先,將一個項目添加到要處理的隊列中。其次,檢查隊列中關於報告是否準備就緒的狀態。第三,將完成的報告發送回呼叫客戶端。

這樣可以讓客戶基本上做了一場火災,忘記了報告請求,稍後再回來檢查其狀態。此外,這意味着如果IIS因任何原因而回收,您仍然可以。

對於獎勵積分,我會添加一些錯誤處理代碼,當Windows服務重新啓動時,它可以重新啓動正在執行中的報告作業。這會使它更健壯一些,並允許您隨時重新啓動服務器。

+0

感謝您的回覆,其他回覆也很有用。 – RKP 2011-01-04 15:13:50

0

我已經禁用了iis中的所有自動關閉進程,以免出現任何問題。我已經監視了內存限制,當然這個程序也能順利地處理內存中的任何問題。

我認爲這個自動關閉觸發器主要是爲了將過多的網站集中在一起的過程而設計的,並且可能其中一些沒有很好的編程。但是,如果你是你的iis的主人,並且你已經檢查你的程序沒有內存問題,那麼最好不要關閉它,或者至少用某種方式控制關閉過程。

好吧,最好在IIS之外進行長時間運行的進程,但開發起來並不那麼簡單,安裝起來不是那麼簡單,檢查出來也不那麼簡單。