Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protected async Task<FbrResponse> StartXmlRequestCycle(RequestContext context, string request)
- {
- for (int attemptNumber = 0; attemptNumber < _maxRequestAttemptNumber; attemptNumber++)
- {
- XmlDocument xmlResponse = await _xmlRequester.SendRequest(context, request);
- await Logger.Build(LogLevel.Info)
- .SetMessage($"Попытка запроса номер {attemptNumber}. Результат в busMessage")
- .SetBusMessage(xmlResponse.InnerXml)
- .SetModule(this)
- .SetCompany(context.CompanyId)
- .Send();
- FbrResponse response = ExtractModelResponse(xmlResponse);
- if (await CheckResponse(context, response, attemptNumber))
- {
- return response;
- }
- }
- return null;
- }
- private async Task<bool> CheckResponse(
- RequestContext context,
- FbrResponse response,
- int attemptNumber)
- {
- if (response?.State?.Status == "ok" || !string.IsNullOrEmpty(response?.State?.Apid))
- {
- string apid = response.State.Apid;
- await Logger.Build(LogLevel.Info)
- .SetMessage($"Попытка запроса номер {attemptNumber} увенчалась успехом. Apid = {apid}")
- .SetModule(this)
- .SetBusMessage(response)
- .SetCompany(context.CompanyId)
- .Send();
- return true;
- }
- if (response?.State?.Status == "err")
- {
- if (response?.State?.Error == "Системная ошибка")
- {
- await Logger.Build(LogLevel.Error)
- .SetMessage($"Попытка запроса номер {attemptNumber} привела к системной ошибке.")
- .SetModule(this)
- .SetBusMessage(response)
- .SetCompany(context.CompanyId)
- .Send();
- return false;
- }
- else
- {
- await Logger.Build(LogLevel.Error)
- .SetMessage($"При запросе номер {attemptNumber} произошла неизвестная ошибка. Прекращаем обработку.")
- .SetModule(this)
- .SetBusMessage(response)
- .SetCompany(context.CompanyId)
- .Send();
- throw new FbrWrongDataException($"При запросе номер {attemptNumber} произошла неизвестная ошибка или количество попыток было исчерпано.");
- }
- }
- await Logger.Build(LogLevel.Error)
- .SetMessage($"При запросе номер {attemptNumber} пришел непоятный ответ. Прекращаем обработку.")
- .SetModule(this)
- .SetBusMessage(response)
- .SetCompany(context.CompanyId)
- .Send();
- return false;
- }
Add Comment
Please, Sign In to add comment