我有一个需要很长时间才能运行的 WCF 服务方法。为了便于解释,假设有时需要 0.5 秒,有时需要 5 秒。处理每个请求的时间从 0.5 到 5 秒不等。有一个业务条件是,如果服务不能在 2 秒内处理请求,客户端会认为它失败,并考虑将请求发送到另一个服务器。
假设服务有 10 个并发请求,其中 4 个成功,因为服务设法在不到 2 秒的时间内执行它们,其余 6 个失败。我面临的问题是剩下的 6 个正在做一些客户不会消费的事情。由于这 6 个请求会消耗服务器资源,因此新的传入请求会延迟。随着时间的推移,您会看到越来越多的请求被视为失败,这仅仅是因为 WCF 将一旦处理后没人会使用的请求排队。
如果 WCF 限制/超时未能在收到请求后的 3 秒内执行 Web 方法/请求,我该如何指示它终止当前请求。这不应该是客户端设置。我想像这样指示服务“如果你不能在 4 秒内处理请求,就忘记它并停止处理该请求,因为没有人会使用你的最终结果”。
我玩过 ServiceThrottlingBehavior 和 (CloseTimeout,OpenTimeout,SendTimeout,ReceiveTimeout) 但没有任何帮助告诉服务在一定时间后停止处理。