2012-09-25 45 views
1

在我的IIS 7.5上,我有一个AppPool,其中startMode =“AlwaysRunning”。另外,我将AppPool回收设置为3分钟进行测试。IIS ThreadAbort异常

当我运行一个长时间运行的任务(10分钟)时,它会抛出ThreadAbort。我认为“AlwaysRunning”会解决它。为什么会发生?我需要改变什么吗?

回答

0

应用程序池回收正在导致ThreadAbortException,因为它关闭了池。无论任何事情池池进程将被终止并重新启动。池中的代码无法防止此问题(ThreadAbortException特别之处在于它可以被捕获但不被使用)。

startMode="AlwaysRunning"只是意味着池将始终可用。它没有声明哪个池进程是这样​​的(因此在池进程终止后它会自动启动另一个进程;或者如果IIS重新启动,它将自动启动w3wp.exe)。

消除3分钟的回收循环时间长度。我没有看到它对测试有何益处(因为每当ASP.NET应用程序被修改时,IIS都会重新启动AppDomain)。

+0

那么,如何在没有进程运行时偶尔回收应用程序池?或者我可以通过程序控制回收?这个答案表明这个设置将有助于保持活力。 http://stackoverflow.com/questions/11140597/iis-app-pool-recycle-quartz-scheduling我有相同的设置。我仍然需要偶尔回收而不会影响日程安排 – user194076

+0

我会使用IIS管理器重新启动池,或者使用任务管理器并直接杀死w3wp.exe。 – Dai

+0

不,我的意思是我需要像所有其他应用程序一样每天自动执行一次,所以我避免了内存泄漏。我知道,我需要修复内存问题,但在这一点上,我只需要我的调度程序来完成应用程序池回收。 – user194076