我正在使用一种令人沮丧的API,它有一种令人讨厌的习惯,即改变它的限制速度。有时我可以每秒发送一个请求,有时我只能每隔三到四秒发送一个请求。
考虑到这一点,我需要创建一种方法来管理它。每当请求失败时,它将返回503响应(服务不可用)。我目前的计划是使用我HttpStatusCode
的{{1}}来确定我是否应该吞下当前的WebResponse
。我可以重复这个x次,直到请求成功,或者完全取消该过程。
请注意,我无法停止并重新启动该过程,因为这对用户来说既耗时又损坏了数据结构。
目前,我已将API调用和XML加载包装到它自己的方法中:
WebException
然后我可以调用它,检查它是否返回false值,如下所示:
int webexceptionnumber = 200;
public bool webResponseSuccessful(string uri, XmlDocument doc)
{
try
{
WebRequest request = HttpWebRequest.Create(uri);
WebResponse response = request.GetResponse();
doc.Load(response.GetResponseStream());
return true;
}
catch(WebException l)
{
if (((HttpWebResponse)l.Response).StatusCode == HttpStatusCode.ServiceUnavailable)
{
webexceptionnumber = 503; // I need to do this in a much neater
return false; //fashion, but this is quick and dirty for now
}
else
{
return false;
}
}
}
我很难过如何干净利落地做到这一点。我想通过使用if (!webResponseSuccessful(signedUri, xDoc))
{
//Here is where I'm struggling - see below
}
语句来避免变得更加混乱,那么当返回503响应时如何重复该操作?是goto
循环的答案,还是我真的需要取消这个额外的整数并以更清洁的方式做到这一点?
答案 0 :(得分:0)
将bool更改为"返回类型"在那种类型中有一个bool,说IsSuccessful和ShouldTryAgain。然后让呼叫者决定再次运行该操作或继续。
public class ReturnType {
public IsSuccessFul{get;set;}
public ShouldTryAgain {get;set;}
}