/// <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);
        }