在服务器端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。