用于 WCF 调用的 IIS 请求限制回收

IIS Request Limit Recycling for WCF calls

我们有一个专用于不经常调用(可能每天 15-20 次)的 WCF 服务的应用程序池。然而,调用可能需要几分钟时间,前几天,当调用仍在处理时 IIS 回收应用程序池时,我们被烧毁了,因为关闭超时 运行 结束。

我们正在考虑使用请求限制回收,但我的问题是:当应用程序池回收 "after x requests" 时,是在第 x 个请求之后完成?还是它会启动请求,启动重叠进程来处理新请求,然后使第 x 个请求受到与当前烧毁我们相同的关闭超时的影响?

类似问题:
How to detect if the current application pool is winding up in IIS7.5 and Asp.Net 3.5+

检查您在应用程序池中的关机时间限制设置。

无论您如何进行回收,都会检查此设置以确定请求在被强制关闭之前允许进行多长时间。

当应用程序池被回收时,IIS 尝试先从应用程序池中排出 运行 请求,然后 同时一个新的应用程序池是已经开始接受新请求。通过使设置足够高以适应您的长 运行 请求,您将允许 IIS 安全地耗尽旧的应用程序池。

我建议您执行以下操作。

1- 在您的 WCF 服务下创建一个 bool Ping() { return true;} 方法。

2- 创建负责轮询 Ping() 方法的 IIS Web 应用程序。这是我发现让我的 WCF 服务保持活动状态的唯一方法。

3- WCF long 运行 操作也必须从另一个后台 IIS 进程(Web 应用程序)调用,该进程必须从消息队列中读取并调用 WCF 操作。因此,您需要在队列中记录 WCF long 运行 操作调用请求。这样,如果托管 WCF 服务的应用程序池关闭,您将有可能重试调用。