我们有一个专门用于WCF服务的应用程序池,该服务很少被调用(可能每天15-20次)。但是,这些调用可能需要几分钟时间,而且当IIS在回调应用程序池时,由于关闭超时已用完而仍在处理,因此我们被烧毁了。
我们正在考虑使用请求限制回收,但我的问题是:当应用程序池回收“ x 请求之后”时,是 x 之后请求完成?或者它是否启动请求,启动重叠的进程来处理新请求,然后将 x 请求置于当前烧毁我们的相同关闭超时?
类似问题:
How to detect if the current application pool is winding up in IIS7.5 and Asp.Net 3.5+
答案 0 :(得分:0)
检查应用池上的关机时间限制设置。
无论您如何进行回收,都会检查此设置以确定在强行关闭之前允许请求的持续时间。
当应用程序池被回收时,IIS会先尝试从应用程序池中消耗正在运行的请求,然后再,同时已启动一个接受新请求的新应用程序池。通过使设置足够高以适应长时间运行的请求,您将允许IIS安全地耗尽旧的应用程序池。
答案 1 :(得分:0)
我建议您执行以下操作。
1-在WCF服务下创建一个bool Ping(){return true;}方法。
2-创建一个负责轮询Ping()方法的IIS Web应用程序。这是我发现保持我的WCF服务活着的唯一方法。
必须从另一个必须从消息队列中读取并调用WCF操作的后台IIS进程(Web应用程序)调用3 WCF长时间运行的操作。因此,您需要在队列中记录WCF长时间运行的操作调用请求。这样,如果托管WCF服务的应用程序池关闭,您就可以重试调用。