Quantcast
Channel: Visual Studio General Questions forum
Viewing all articles
Browse latest Browse all 21115

Windows service doesn't continue the execution

$
0
0

Hi

I created a Windows Service which runs perfect when I run the code from a console app but I doesn't work when it runs in the windows service:

I can see that it line is not executed: 

foreach (var item in pendientes)

My complete code:

using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Drawing.Imaging;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Drawing;
using CajaWebTCC.ServicioComprobante02.Agente;
using CajaWebTCC.ServicioComprobante02.ServicioComprobante02;
using System.Net;
using CajaWebTCC.ServicioComprobante02.Impresion;

namespace CajaWebTCC.ServicioComprobante02
{
    public partial class ServicioComprobanteViewer : ServiceBase
    {
        private readonly int _intervalo;
        private System.Timers.Timer _timer;
        private EstadoServicio _estadoServicio;
        private readonly EventLog _log;
        private readonly bool _logHabilitado;
        private int m_currentPageIndex;
        private IList<Stream> m_streams;
        public ServicioComprobanteViewer()
        {
            InitializeComponent();

            var logSource = ConfigurationManager.AppSettings["LogSource"];
            var logName = ConfigurationManager.AppSettings["LogName"];
            var inter = ConfigurationManager.AppSettings["Intervalo"];
            _logHabilitado = Boolean.Parse(ConfigurationManager.AppSettings["LogHabilitado"]);


            _intervalo = Int32.Parse(inter);

            if (_logHabilitado)
                _log = new EventLog { Source = logSource, Log = logName };
        }

        #region timer

        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {

            if (_estadoServicio != EstadoServicio.Esperando) return;
            _estadoServicio = EstadoServicio.Procesando;

            _log.WriteEntry("Se lanza proceso");
            ProcesarImpresion();
            _log.WriteEntry("fin proceso");
            _estadoServicio = EstadoServicio.Esperando;
        }

        #endregion

        #region Events Interface

        protected override void OnStart(string[] args)
        {
            //Configuracion del Timer
            if (_timer == null) _timer = new System.Timers.Timer();
            _timer.AutoReset = true;
            _timer.Interval = _intervalo * 1000;
            _timer.Elapsed += timer_Elapsed;

            _estadoServicio = EstadoServicio.Procesando;

            _timer.Start();
            //ProcesarImpresion();
            _estadoServicio = EstadoServicio.Esperando;
            //Registros del log
            if (_logHabilitado)
                _log.WriteEntry("Se inicia el servicio de impresión con QR.");
        }


        protected override void OnStop()
        {
            _timer.Stop();
            _timer.Elapsed -= timer_Elapsed;
            _timer = null;
            if (_logHabilitado)
                _log.WriteEntry("El servicio de impresión con QR se detuvo.");
        }

        #endregion
        private Stream CreateStream(string name,
          string fileNameExtension, Encoding encoding,
          string mimeType, bool willSeek)
        {
            Stream stream = new MemoryStream();
            m_streams.Add(stream);
            return stream;
        }

        private void Export(LocalReport report)
        {
            const string deviceInfo =
              @"<DeviceInfo><OutputFormat>EMF</OutputFormat><PageWidth>10in</PageWidth><PageHeight>12in</PageHeight><MarginTop>0.1in</MarginTop><MarginLeft>0.1in</MarginLeft><MarginRight>0.1in</MarginRight><MarginBottom>0.1in</MarginBottom></DeviceInfo>";
            Warning[] warnings;
            m_streams = new List<Stream>();
            report.Render("Image", deviceInfo, CreateStream,
               out warnings);
            foreach (Stream stream in m_streams)
                stream.Position = 0;
        }

        private void PrintPage(object sender, PrintPageEventArgs ev)
        {
            var pageImage = new
               Metafile(m_streams[m_currentPageIndex]);

            // Adjust rectangular area with printer margins.
            var adjustedRect = new Rectangle(
                ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
                ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
                ev.PageBounds.Width,
                ev.PageBounds.Height);

            // Draw a white background for the report
            ev.Graphics.FillRectangle(Brushes.White, adjustedRect);


            // Draw the report content
            ev.Graphics.DrawImage(pageImage, adjustedRect);


            // Prepare for the next page. Make sure we haven't hit the end.
            m_currentPageIndex++;
            ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
        }
        private void Print()
        {
            if (m_streams == null || m_streams.Count == 0)
                throw new Exception("Error: No hay stream que imprimir.");
            using (var printDoc = new PrintDocument())
            {
                printDoc.PrinterSettings.PrinterName = ConfigurationManager.AppSettings["NombreImpresora"];
                printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                m_currentPageIndex = 0;


                printDoc.Print();

            }
        }

        public void ProcesarImpresion()
        {
            try
            {
                _log.WriteEntry("paso0");
                var pendientes = AgenteServicioComprobante.ListarComprobantePendiente(new ComprobantePendienteEL
                {
                    vch_CodigoEstacion = Dns.GetHostName()
                });


                if (pendientes != null && pendientes.Any())
                {
                    _log.WriteEntry("paso01");

                    foreach (var item in pendientes)
                    {

                        var vchTextoComprobante = item.vch_TextoComprobante;
                        byte[] bitsCodigoQr = null;

                        if (!string.IsNullOrEmpty(item.vch_ImagenQR))
                        {
                            var codigoQr = item.vch_ImagenQR;

                            bitsCodigoQr = Convert.FromBase64String(codigoQr);
                        }

                        var ticket = new List<TicketQr>
                        {
                            new TicketQr
                            {
                                Comprobante = vchTextoComprobante,
                                CodigoQr = string.IsNullOrEmpty(item.vch_ImagenQR) ? null :
                            bitsCodigoQr
                            }
                        };

                        var report = new LocalReport
                        {
                            ReportPath = AppDomain.CurrentDomain.BaseDirectory + @"Impresion\ReporteQR.rdlc"
                        };

                        report.DataSources.Add(
                        new ReportDataSource("dsImpresionQr", ticket));

                        Export(report);
                        Print();


                        AgenteServicioComprobante.ActualizarComprobantePendiente(new ComprobantePendienteEL
                        {
                            int_CodigoComprobantePendiente = item.int_CodigoComprobantePendiente
                        });

                        System.Threading.Thread.Sleep(2000);

                    }
                }


            }
            catch (Exception ex)
            {
                if (_logHabilitado)
                {
                    _log.WriteEntry(ex.Message);
                    _log.WriteEntry(ex.StackTrace);
                }
            }
        }
    }

    public enum EstadoServicio
    {
        Esperando = 0,
        Procesando = 1
    }
}


I seens that the app stop working. after: 

if (pendientes != null && pendientes.Any())
                {
                    _log.WriteEntry("paso01")


Viewing all articles
Browse latest Browse all 21115

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>