private async Task StartProcessAsync() { int maxIteration = 10; using (Domain.ApplicationContext context = new Domain.ApplicationContext()) using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.UTF8)) { sw.WriteLine(DateTime.Now.ToString() + " Start"); ApiSearchSession apiSearchSession = null; EFApiSearchSession eFApiSearchSession = new EFApiSearchSession(context); try { //Получаем PartnerID EFApiRegInfo eFApiRegInfo = new EFApiRegInfo(context); ApiRegInfo availableApiRegInfo = await eFApiRegInfo.GetAvailableParnterIdAsync(); sw.WriteLine(availableApiRegInfo.PartnerId); //Получаем прокси EFProxy eFProxy = new EFProxy(context); Proxy availableProxy = eFProxy.GetAvailableProxyAsync().Result; sw.WriteLine(availableProxy.IPAddress); //Получаем свободного производителя EFManufacturer eFManufacturer = new EFManufacturer(context); Manufacturer availableManufacturer = eFManufacturer.GetAvailableManufacturerAsync().Result; sw.WriteLine(availableManufacturer.MouserID); //if (availableApiRegInfo != null && availableProxy != null && availableManufacturer != null) //{ //Создаем очередь apiSearchSession = new ApiSearchSession { ApiRegInfo = availableApiRegInfo, Date = DateTime.Today, IsBusy = true, Manufacturer = availableManufacturer, Proxy = availableProxy }; eFApiSearchSession.AddOrUpdateAsync(apiSearchSession, -1).Wait(); //Запускаем запросы api int count = 1; while (count <= maxIteration) { count++; } eFApiSearchSession.SetNotBusyAsync(apiSearchSession).Wait(); System.Environment.Exit(1); //} } catch (Exception ex) { sw.WriteLine(DateTime.Now.ToString() + " " + ex.Message + ex.InnerException.Message); } finally { //Очередь освобождаем if (apiSearchSession != null) { eFApiSearchSession.SetNotBusyAsync(apiSearchSession).Wait(); } System.Environment.Exit(1); } } }
//private static string writePath = @"D:\MouserClient\MouserClientApi" + Guid.NewGuid() + ".log"; static async Task Main(string[] args) { ApiSearchSession apiSearchSession = null; try { int maxIteration = 5; using (Domain.ApplicationContext context = new Domain.ApplicationContext()) //using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.UTF8)) { //sw.WriteLine(DateTime.Now.ToString() + " Start"); EFApiSearchSession eFApiSearchSession = new EFApiSearchSession(context); //Получаем PartnerID EFApiRegInfo eFApiRegInfo = new EFApiRegInfo(context); ApiRegInfo availableApiRegInfo = await eFApiRegInfo.GetAvailableParnterIdAsync(); //sw.WriteLine(availableApiRegInfo?.PartnerId); try { //Получаем прокси EFProxy eFProxy = new EFProxy(context); Proxy availableProxy = await eFProxy.GetAvailableProxyAsync(); //sw.WriteLine(availableProxy?.IPAddress); //Получаем свободного производителя EFManufacturer eFManufacturer = new EFManufacturer(context); Manufacturer availableManufacturer = await eFManufacturer.GetAvailableManufacturerAsync(); //sw.WriteLine(availableManufacturer?.MouserID); if (availableApiRegInfo != null && availableProxy != null && availableManufacturer != null && !context.ApiSearchSessions.Where(a => a.IsBusy && a.Date == DateTime.Today).Select(a => a.Manufacturer.Id).Contains(availableManufacturer.Id)) { //Создаем очередь apiSearchSession = new ApiSearchSession { ApiRegInfo = availableApiRegInfo, Date = DateTime.Today, IsBusy = true, Manufacturer = availableManufacturer, Proxy = availableProxy, MachineName = Environment.MachineName, CreateDate = DateTime.Now }; await eFApiSearchSession.AddOrUpdateAsync(apiSearchSession, -1); //Запускаем запросы api int count = 1; int countIteration = availableManufacturer.StartingRecord != 0 ? (availableManufacturer.StartingRecord - 1) / 50 + 1 : 0; int startingRecord = 0; while (count <= maxIteration && (startingRecord == 0 || startingRecord < availableManufacturer.NumberOfResult)) { startingRecord = countIteration != 0 ? countIteration * 50 + 1 : 0; await Mouser.Service.Api.Methods.SearchByKeywordMfrRequestAsync (context, availableProxy, availableApiRegInfo, availableManufacturer.SearchText ?? ".", availableManufacturer, 50, startingRecord); await eFApiSearchSession.AddIterationAsync(apiSearchSession); count++; countIteration++; } await eFApiSearchSession.SetNotBusyAsync(apiSearchSession); //sw.WriteLine(DateTime.Now.ToString() + " Stop"); } } catch (Exception ex) { if (ex.Message.Contains("Error Code: 429") || ex.Message.Contains("Invalid unique identifier")) { availableApiRegInfo.IsActive = false; await eFApiRegInfo.AddOrUpdateAsync(availableApiRegInfo, availableApiRegInfo.Id); } if (apiSearchSession != null) { apiSearchSession.Description = ex.Message + ex.InnerException?.Message; await eFApiSearchSession.AddOrUpdateAsync(apiSearchSession, apiSearchSession.Id); await eFApiSearchSession.SetNotBusyAsync(apiSearchSession); } //using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.UTF8)) //{ // sw.WriteLine(DateTime.Now.ToString() + " " + ex.Message + ex.InnerException?.Message); // sw.WriteLine(DateTime.Now.ToString() + " Error Stop (2)"); //} } finally { //Очередь освобождаем if (apiSearchSession != null) { await eFApiSearchSession.SetNotBusyAsync(apiSearchSession); } } } } catch (Exception ex) { //using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.UTF8)) //{ // sw.WriteLine(DateTime.Now.ToString() + " " + ex.Message + ex.InnerException?.Message); // sw.WriteLine(DateTime.Now.ToString() + " Error Stop (2)"); //} } }