나는 조절 속도를 변화시키는 성가신 버릇이있는 실망한 API로 작업하고 있습니다. 때로는 초당 하나의 요청을 보낼 수 있으며 때로는 3 초에서 4 초마다 요청을 보낼 수도 있습니다.데이터 소스에 대한 제어권이없는 곳에서의 삼키는 것
이것을 염두에두고이를 관리 할 방법을 만들어야합니다. 요청이 실패 할 때마다 503 응답 (서비스를 사용할 수 없음)을 반환합니다. 현재 내 계획은 내 WebResponse
의 HttpStatusCode
을 사용하여 현재 WebException
을 삼키는 지 여부를 결정하는 것입니다. 요청이 성공하거나 프로세스가 모두 취소 될 때까지 x 번 반복 할 수 있습니다.
사용자가 시간이 많이 걸리고 데이터 구조가 손상되기 때문에 프로세스를 중지했다가 다시 시작할 수 없습니다.
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;
}
}
}
내가 그때 그렇게처럼, false 값을 반환하는지 확인이 호출 할 수 있습니다 :
현재, 나는 그것의 자신의 방법으로 API 호출 및 XML로드를 싸서 한
if (!webResponseSuccessful(signedUri, xDoc))
{
//Here is where I'm struggling - see below
}
나는 이것을 깔끔하게 처리하는 방법이 어리 석다. goto
문을 사용하여 더 지저분 해지는 것을 피하고 싶습니다. 따라서 503 응답이 반환 될 때 작업을 어떻게 반복합니까? while
루프가 응답입니까, 아니면 정말로 추가 정수를 사용하지 않고 깨끗한 방식으로 처리해야합니까?
이 https://stackoverflow.com/questions/1563191/cleanest-way-to-write-retry-logic을 살펴보십시오. 여러 가지 좋은 답변이 있으므로 특정 시나리오에 가장 적합한 것을 검토하고 선택하십시오. – Nkosi
이것은 황금으로, 나는 Polly에 대해 더 빨리 알았 으면 좋겠다. 무리 감사 –