2011-09-13 47 views
2

我在IIS上運行的系統上有一個進程,它需要幾小時才能完成,因此它在一個線程上運行。如何避免手動啓動的線程死亡?

問題是由於IIS進程超時(無活動),此線程在一段時間後被丟棄。這個線程不能停在中間。

如果線程正在運行,如何防止此超時?

+2

假設您不能在IIS中配置超時? – Ewerton

+4

您是否閱讀過http://stackoverflow.com/questions/536681/can-i-use-threads-to-carry-out-long-running-jobs-on-iis的注意事項? – xanatos

+5

也許在IIS之外的服務上運行它? (「Hours」看起來不像是一個IIS任務。) – 2011-09-13 18:57:20

回答

5

在IIS中的應用程序池設置中,您可以將其配置爲在一段時間不活動後再回收AppDomain。但是請注意,在IIS中使用長時間運行的任務是不好的,這個設置可能不是100%可靠的。例如,如果您的服務器在內存不足或CPU使用率過高時啓動,IIS仍然可以回收它。 IIRC也可以配置此門限。

最好的辦法是將這些長時間運行的任務作爲單獨的Windows服務來進行外部化。

如果你不能做任何以前的事情,你絕對絕望,你可以嘗試在絕望的最後一件事情是通過定期發送HTTP請求來自該後臺線程自動ping Web應用程序,以避免它從死亡中消失。但再一次,這應該是你應該嘗試的最後一件事。

+0

類似於:[如何讓ASP.NET程序集保留在AppDomain中](http://stackoverflow.com/questions/838318/how-to-keep-asp -net組件功能於AppDomain中存活#838348) –

相關問題