我们有一个处理大量请求的 WCF 服务。
我发现,当并发请求的数量超出最大并发连接数的限制时,后续请求将排队等待稍后执行。如果在这些请求有机会执行之前发生超时,IIS 会确定工作进程无响应并将其终止(或回收应用程序池)。
回收过程大约需要一分钟,与此同时服务将会中断,这对我们来说是一个大问题。
无论代码中导致超时和响应时间过长的原因是什么(我们正在处理这个问题),我的问题是这样的:
如果我们为该应用程序池定义多个工作进程,当其中一个工作进程处于相同情况时会发生什么?IIS 是否会回收该应用程序池,或者特定的工作进程将被终止,而其他工作进程将继续处理请求?
答案1
如果您确实需要工作进程来解决它,您可以禁用高级应用程序池属性中的 Ping 功能,这就是我假设 IIS 检测到应用程序池已变得无响应的方式。
不过,您需要确保您的工作进程能够恢复,因为基于 Ping 的回收是安全带,这意味着如果网站挂了,您不需要在凌晨 2 点起床……
如果工作进程主动向 IIS 报告其自身的故障,那么从 IIS 方面来看,这可能是不可避免的,并且您需要禁用应用程序框架自己的健康报告功能。
关于上面的另一个问题/替代方案:如果您的应用程序是无状态的并且支持在 Web Garden 中进行多实例(MaxProcesses > 1),那么 IIS 将回收已变得无响应的工作进程,而不是属于应用程序池的所有 WP - 查找识别被回收的 PID 的系统事件日志。