禁用IIS应用程序池中工作进程的回收的影响

问题描述:

我有一个WCF服务托管在IIS中,需要很长时间(大约5小时)才能执行。 WCF服务基本上使用SSRS(SQL服务器报告服务)生成一些报告并将它们保存到服务器上的某个位置。这个服务实际上是在生成少量报告后停止的,所以我禁用了“工作进程的回收”,“空闲后关闭工作进程”和“限制内核请求队列”,并修复了问题,所有报告都是无论生成它们的数量如何都会生成。但我不确定这是否是正确的解决方法,我想知道在IIS中的WCF服务的应用程序池中取消选中这些设置的影响是什么?有没有更好的方法来解决这个问题?禁用IIS应用程序池中工作进程的回收的影响

对于任何长时间运行的进程,最好在IIS之外进行。

在这种情况下,我会有一个正在运行的监视请求队列的Windows服务。当一个请求生成报告时,它会分离一个线程来执行生成。

Web服务将负责3件事。首先,将一个项目添加到要处理的队列中。其次,检查队列中关于报告是否准备就绪的状态。第三,将完成的报告发送回呼叫客户端。

这样可以让客户基本上做了一场火灾,忘记了报告请求,稍后再回来检查其状态。此外,这意味着如果IIS因任何原因而回收,您仍然可以。

对于奖励积分,我会添加一些错误处理代码,当Windows服务重新启动时,它可以重新启动正在执行中的报告作业。这会使它更健壮一些,并允许您随时重新启动服务器。

+0

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

我已经禁用了iis中的所有自动关闭进程,以免出现任何问题。我已经监视了内存限制,当然这个程序也能顺利地处理内存中的任何问题。

我认为这个自动关闭触发器主要是为了将过多的网站集中在一起的过程而设计的,并且可能其中一些没有很好的编程。但是,如果你是你的iis的主人,并且你已经检查你的程序没有内存问题,那么最好不要关闭它,或者至少用某种方式控制关闭过程。

好吧,最好在IIS之外进行长时间运行的进程,但开发起来并不那么简单,安装起来不是那么简单,检查出来也不那么简单。