daily pastebin goal
21%
SHARE
TWEET

Untitled

a guest Mar 22nd, 2018 67 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. protected async Task<FbrResponse> StartXmlRequestCycle(RequestContext context, string request)
  2.         {
  3.             for (int attemptNumber = 0; attemptNumber < _maxRequestAttemptNumber; attemptNumber++)
  4.             {
  5.                 XmlDocument xmlResponse = await _xmlRequester.SendRequest(context, request);
  6.                
  7.                 await Logger.Build(LogLevel.Info)
  8.                     .SetMessage($"Попытка запроса номер {attemptNumber}. Результат в busMessage")
  9.                     .SetBusMessage(xmlResponse.InnerXml)
  10.                     .SetModule(this)
  11.                     .SetCompany(context.CompanyId)
  12.                     .Send();
  13.  
  14.                 FbrResponse response = ExtractModelResponse(xmlResponse);
  15.                
  16.                 if (await CheckResponse(context, response, attemptNumber))
  17.                 {
  18.                     return response;
  19.                 }
  20.             }
  21.  
  22.             return null;
  23.         }
  24.        
  25.        
  26.         private async Task<bool> CheckResponse(
  27.             RequestContext context,
  28.             FbrResponse response,
  29.             int attemptNumber)
  30.         {
  31.             if (response?.State?.Status == "ok" || !string.IsNullOrEmpty(response?.State?.Apid))
  32.             {
  33.                 string apid = response.State.Apid;
  34.                
  35.                 await Logger.Build(LogLevel.Info)
  36.                     .SetMessage($"Попытка запроса номер {attemptNumber} увенчалась успехом. Apid = {apid}")
  37.                     .SetModule(this)
  38.                     .SetBusMessage(response)
  39.                     .SetCompany(context.CompanyId)
  40.                     .Send();
  41.                
  42.                 return true;
  43.             }
  44.  
  45.             if (response?.State?.Status == "err")
  46.             {
  47.                 if (response?.State?.Error == "Системная ошибка")
  48.                 {
  49.                     await Logger.Build(LogLevel.Error)
  50.                         .SetMessage($"Попытка запроса номер {attemptNumber} привела к системной ошибке.")
  51.                         .SetModule(this)
  52.                         .SetBusMessage(response)
  53.                         .SetCompany(context.CompanyId)
  54.                         .Send();
  55.  
  56.                     return false;
  57.                 }
  58.                 else
  59.                 {
  60.                     await Logger.Build(LogLevel.Error)
  61.                         .SetMessage($"При запросе номер {attemptNumber} произошла неизвестная ошибка. Прекращаем обработку.")
  62.                         .SetModule(this)
  63.                         .SetBusMessage(response)
  64.                         .SetCompany(context.CompanyId)
  65.                         .Send();
  66.                    
  67.                     throw new FbrWrongDataException($"При запросе номер {attemptNumber} произошла неизвестная ошибка или количество попыток было исчерпано.");
  68.                 }
  69.             }
  70.            
  71.             await Logger.Build(LogLevel.Error)
  72.                 .SetMessage($"При запросе номер {attemptNumber} пришел непоятный ответ. Прекращаем обработку.")
  73.                 .SetModule(this)
  74.                 .SetBusMessage(response)
  75.                 .SetCompany(context.CompanyId)
  76.                 .Send();
  77.  
  78.             return false;
  79.         }
RAW Paste Data
Top