2011-09-13 19 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の外でサービスとして実行しますか? (「時間」はIISタスクのようには見えません) –

答えて

5

IISのアプリケーションプールの設定では、一定期間使用しないとAppDomainをリサイクルしないように構成できます。ただし、IISで長時間実行されるタスクを使用することは悪い考えであり、この設定は100%信頼できない可能性があります。たとえば、サーバーのメモリ不足またはCPU使用率が高い場合、IISはリサイクルできます。 IIRCでは、このしきい値を設定することもできます。

これらの長期実行タスクを個別のWindowsサービスとして外部化するのが最善の方法です。

もしもあなたが前のことをすることができず、あなたが絶望的に​​挑戦できる最後のことは、定期的な間隔でHTTP要求を送ることによってこのバックグラウンドスレッドからWebアプリケーションを自動pingすることですそれは死ぬことから。しかし、もう一度それは本当にあなたが試みるべき最後のものでなければなりません。

+0

類似:[AppDomainでASP.NETアセンブリを生き残る方法](http://stackoverflow.com/questions/838318/how-to-keepasp -net-assemblies-in-appdomain-alive#838348) –

関連する問題