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

时间:2010-12-23 17:02:03

标签: asp.net wcf iis reporting-services application-pool

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

2 个答案:

答案 0 :(得分:5)

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

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

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

这将允许客户端基本上触发并忘记报告请求,并稍后回电以检查其状态。此外,这意味着如果IIS因任何原因而被回收,您仍然可以。

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

答案 1 :(得分:0)

对于我的应用程序,我已经禁用了iis的所有自动关闭过程,没有任何问题。我已经监控了内存限制,当然程序也能顺利运行,没有任何内存问题。

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

好的,最好在IIS外部进行长时间的运行,但是开发它并不是那么简单,安装起来不是那么简单,而不是那么容易检查它。