Condições de parada e retry.

This commit is contained in:
Adriano Serighelli 2025-09-30 13:21:20 -03:00
parent e6ce1ba938
commit a170168f21

View File

@ -145,16 +145,38 @@ internal class Plat_integ
using var response = await client.PostAsync(endpoint, conteudo, ct); using var response = await client.PostAsync(endpoint, conteudo, ct);
string resposta = await response.Content.ReadAsStringAsync(); string resposta = await response.Content.ReadAsStringAsync();
if ((int)response.StatusCode == 429) // limite da API if ((int)response.StatusCode >= 400)
{ {
Console.WriteLine("⚠️ Limite de requisições atingido. Aguardando próximo minuto..."); try
{
VerificarRespostaSOAP(resposta);
}
catch (SoapFaultException ex)
{
if (ex.ErrorCode == "2003") // limite de requisições
{
var now = DateTime.UtcNow; var now = DateTime.UtcNow;
var delay = 60000 - (now.Second * 1000 + now.Millisecond); var delay = 60000 - (now.Second * 1000 + now.Millisecond);
await Task.Delay(delay, ct); Console.WriteLine($"!! Limite de requisições atingido. Aguardando até {DateTime.Now.AddMilliseconds(delay)}");
continue; // tentar de novo sem contar como falha await Task.Delay(delay, ct); // tentar de novo sem contar como falha
continue;
} }
if (ex.ErrorCode == "4001") // Dados não encontrados
response.EnsureSuccessStatusCode(); {
errosPersistentes.Add($"{perfil._Cod_5min};{perfil._Codigo_SCDE};SOAP Fault: {ex.ErrorCode};{ex.ErrorMessage.Replace("\n", "-n-")}");
break;
}
if (ex.ErrorCode == "2001") // Sem acesso
{
errosPersistentes.Add($"{perfil._Cod_5min};{perfil._Codigo_SCDE};SOAP Fault: {ex.ErrorCode};{ex.ErrorMessage.Replace("\n", "-n-")}");
break;
}
else
{
throw;
}
}
}
string resposta = await response.Content.ReadAsStringAsync(ct); string resposta = await response.Content.ReadAsStringAsync(ct);
await ProcessarXMLAsync(resposta, await dataSource.OpenConnectionAsync()); await ProcessarXMLAsync(resposta, await dataSource.OpenConnectionAsync());