在服务器端Webrequest上执行严格的超时策略

时间:2020-03-06 14:44:18  来源:igfitidea点击:

我们将需要召集一个第三方来使用REST检索值,但是如果我们在10毫秒内未收到响应,我想使用默认值并继续进行处理。

我倾向于使用异步WebRequest来做到这一点,但我想知道使用同步请求是否有技巧。

有什么建议吗?

解决方案

如果我们正在执行请求并等待返回,我会说保持同步,如果我们在等待时不做任何事情或者保持响应,则没有理由发出异步请求。

对于同步通话:

WebRequest request = WebRequest.Create("http://something.somewhere/url");
WebResponse response = null;
request.Timeout = 10000; // 10 second timeout
try
{
    response = request.GetResponse();
}
catch(WebException e)
{
  if( e.Status == WebExceptionStatus.Timeout)
  {
    //something
  }
}

如果执行异步:

我们将必须在需要自己检查超时的请求对象上调用Abort(),没有内置的方法可以强制执行硬超时。

我们可以将对第三方的呼叫封装在WebService中。然后,我们可以从应用程序同步调用此WebService,Web Service引用具有一个简单的timeout属性,我们可以将其设置为10秒或者任何其他时间。

超时期限过后,从Web服务获取第三者数据的调用将引发WebException。我们可以捕获它,而改用默认值。

编辑:上面的菲利普的反应更好。 RIF。