/// <summary> /// Возращает новый элемент очереди для обработки. /// Если очередь пуста, возвращает null. /// </summary> /// <returns>ParserQueueElement</returns> public ParserQueueElement GetNewElement() { string responseFromServer; try { WebRequest request = WebRequest.Create(WEBSERVICE_URL); request.Method = _method; request.Timeout = _timeout; request.ContentType = _contentType; using (WebResponse response = request.GetResponse()) { Console.WriteLine("[Get] Response status = " + ((HttpWebResponse)response).StatusDescription); using (Stream dataStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(dataStream)) { responseFromServer = reader.ReadToEnd(); Console.WriteLine("[Get response]\r\n" + responseFromServer); } } } ParserQueueElement el = JsonConvert.DeserializeObject <ParserQueueElement>(responseFromServer); return(el); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } return(new ParserQueueElement()); }
static void printParserQueueElement(ParserQueueElement elt) { Console.WriteLine("[Queue Element]: QueueId={0}, DocNumber={1}, Email={2}, CreatedTimeUtc={3}", elt.ParserQueueId, elt.ClientDocNum, elt.ClientEmail, elt.CreatedTimeUtc); }
/// <summary> /// Обработка элемента очереди ParserQueue /// </summary> /// <returns>Кол-во обработанных элементов очереди</returns> public static int processQueue(ParserWebQueueParameters parserWebQueueParameters, EmailSenderConfig emailSenderConfig, WebParserConfig webParserConfig) { // Создание обработчика очереди IParserWebQueue parserWebQueue = new OnlineParserWebQueue(parserWebQueueParameters); ParserQueueElement elt = null; try { // Получение элемента очереди elt = parserWebQueue.GetNewElement(); if (elt == null) { Console.WriteLine("No new elements to process."); return(0); } // Пометка статусом "Взят в обработку" parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 2); // Запустить web-parser Console.WriteLine("Start parsing website for Document Number: {0}", elt.ClientDocNum); WebParserResult parserResult = ParseDocument(webParserConfig, elt.ClientDocNum); Console.WriteLine("parser result: {0}. Last date: {1}, pdf link: {2}", parserResult.ParserStatus, parserResult.LastDealDate, parserResult.CardUrl); if (parserResult.ParserStatus != "Ok") { Console.WriteLine("Error: {0}", parserResult.ParserError); } // Отправка Email string fileName = parserResult.DocumentPfdPath; string emailTo = elt.ClientEmail; string docNumber = elt.ClientDocNum; DateTime requestDate = elt.CreatedTimeUtc; sendEmailByNewInterface(emailSenderConfig, fileName, emailTo, docNumber, requestDate, parserResult); printParserQueueElement(elt); // Пометка элемента очереди как успешно обработанный parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 3); return(1); } catch (Exception exc) { Console.WriteLine("Error: {0}", exc.Message); // Установить статус "Ошибка обработки" if (elt != null) { parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 4, exc.Message); } } return(0); }