El servicio en ocasiones es Lento, al principio cuando inicio su operación era veloz.
En nuestra región hay cierto horario en el cual es díficil/imposible verificar algunos cientos de comprobantes.
Seguro ya somos muchos aprovechandolo y de ahi que se sature.
Nota: un factor que puede hacer lento el uso de este servicio seria que los DNS que usas esten mal. Usamos un DNS interno y rara vez sufrimos este problema.
No recuerdo si publique aquí el código pero hace poco detecte un error de mi parte donde hago la conexión al webservice durante cada verificación, y en mi aplicación que utilizo actualmente en produccción lo adapte para que lo haga al iniciar y en caso de caida del servicio que intente 3 veces a reconectarse y si falla que termine con un aviso, aquí pongo un extracto en caso de que te sirva:
Código: Seleccionar todo
procedure TForm1.doVerificacionParaTodos;
{ almacena en sVNC la verificacion del comprobante }
begin
if vData.tipoNomina then
sVNC:= doNominaVigente(vData.UUID)
else
begin
if sUUID <> kUUIDFlag then
begin
if FflagInitICS then
begin
FflagInitICS:= False;
iccs := GetIConsultaCFDIService();
end;
sVNC := doVerificacion;
end
else
sVNC:= 'N';
end;
sVNCtmp:= sVNC;
end;
function TForm1.doVerificacion : string; //char;
var
sData: WideString;
cResult: string; //char;
intentos: cardinal;
ClaseCFD : integer;
tmpEmisor, tmpReceptor : string;
begin
// codigo cortado ....
begin
intentos := 1;
while True do
begin
sData := format('re=%s&rr=%s&tt=%s&id=%s', [sEmisor, sReceptor, sMonto, sUUID]);
try
vAcuse := iccs.Consulta(sData);
if vAcuse.Estado = 'Vigente' then
cResult := 'V'
else if vAcuse.Estado = 'Cancelado' then
cResult := 'C'
else
cResult := 'N';
break; // ouch!!
except
Info(format('%d - Error de conexión: %s', [sData]));
inc(intentos);
if intentos > 3 then
begin
iccs := GetIConsultaCFDIService(); // reconectarse
cResult := 'X'; // Error
inc(nError);
Info('Hay errores en la conexión, se recomienda abortar este proceso e intentar despues.');
cbStop.Checked := True;
break; // ouch!!
end;
sleep(3000); // pausa de 3 segundos...
end;
end;
end
else
begin
// los recibos de nomina se revisan en el servidor de "..."
// PERO en 2016 se espera un CFDi único para nominas
if (sEmisor = kRFC) and (ClaseCFD = kCFDN) then
cResult := doNominaVigente(vData.uuid)
else
cResult := 'V'; // falta procesar recibos de honorarios
end;
end
else
begin
cResult := 'E';
end;
Result := cResult;
end;
Como esto fue vaporware la verdad ni comentarios completos tiene pero quizá de algo te sirva.