IIS/Azure IIS - 限制最大响应时间



我开发的 Web 服务必须在最多 6 秒内响应。如果 Web 服务无法在 6 秒内响应,则必须使用一些硬编码数据进行响应。

Web 服务是一种代理,它转换传入的数据并向另一个服务发出请求。该服务是第三方服务,可能会失败或响应时间过长。

目前,应用程序代码中存在限制,将第三方服务的超时限制为 3 秒(请记住,总响应时间最长为 6 秒)。

但问题是应用程序具有非常高的负载,有时它无法在剩余的 3 秒内执行其代码(但不加载我们的应用程序代码是在毫秒内执行的,实际上有一些代码)。我相信 Windows 无法运行所有线程,有时线程睡眠超过 3 秒,并且违反了最大响应时间,无法处理此问题。

该应用程序是在 C# asp.net 核心中开发的,并且完全异步。

那么问题:是否可以限制 IIS 级别的响应时间?如果发生超时,是否可以使用预定义的数据进行响应?除了向 Azure 添加额外的实例来提高响应能力之外,有没有办法?有没有一种编程方法来处理超时可靠?

编辑

我需要

  1. 保证高负载 IIS 上的响应时间。在非实时操作系统上完全可能吗?
  2. 当请求未及时处理时,发送预定义的硬编码响应。
  3. 在 Azure 上执行此操作

对于配置本身,您被限制为可以用作简单转义的分钟数,但是,您无法执行此操作,因此我想我会使用类似于企业库重试逻辑的东西,即创建一个采用方法和超时值的小类:

public class TimeRestrictor{
  public bool InvokeAction(Action action, TimeSpan timeout){
  }
  public Tuple<bool, T> InvokeFunction<T>(Func<T> function, TimeSpan timeout){
  }
}

您可以使用某种计时器轻松实现此类,也可以使用 async/await(为了简单起见,我省略了这些)

然后,将

此方法调用为:

var ranInTime = timeRestrictor.InvokeAction(MyMethod, TimeSpan.FromSeconds(6));
if(!ranInTime){
  SetTimeOutResult();
} 

这需要一些调整,我只是在头顶上写这段代码,但可以让您大致了解我的建议。

最新更新