2016-03-21 210 views
0

我开发的Web服务必须在最多6秒内响应。如果Web服务无法在6秒内响应,它必须响应一些硬编码数据。IIS/Azure IIS - 限制最大响应时间

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

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

但问题是应用程序负载非常高,有时无法在3秒内执行其代码(但未加载我们的应用程序代码以毫秒执行,实际上只有一小部分代码)。 我相信Windows无法运行所有线程,有时线程会睡眠超过3秒,并且最大响应时间被违反,而无法处理此问题。

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

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

编辑

我需要在IIS

  1. 保证响应时间高负荷。非实时操作系统有可能吗?
  2. 当请求没有及时处理发送预定义的硬编码响应。
  3. 做到这一点在Azure上
+1

听起来好像您需要增加可用于您的Azure实例的资源和/或添加具有负载平衡的其他实例。您可能还想要查找应用程序代码中的任何性能瓶颈,并解决这些问题。 – user1666620

回答

0

对于配置本身,你只限于你也可以使用一个简单的逃生分钟,但是,你不能够做​​到这一点,所以我想我会用类似企业库重试逻辑的东西,那就是,让小类,它的方法和超时值:

public class TimeRestrictor{ 
    public bool InvokeAction(Action action, TimeSpan timeout){ 

    } 

    public Tuple<bool, T> InvokeFunction<T>(Func<T> function, TimeSpan timeout){ 

    } 
} 

您可以easilly实现这个类的一些种类的计时器,也使用异步/ AWAIT (为了简单起见,我将这些留下)

那么这将是调用此方法的问题:

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

这需要一些调整,我只是写这个代码把我的头顶部,但给你我的建议的总体思路。