Пример #1
0
        /// <summary>
        /// //Metodo che chiama la web api per inviare gli eventi. I due parametri verrano usati per creare I due eventi
        /// </summary>
        /// <param name="summaryModel"></param>
        /// <param name="streamModel"></param>
        /// <returns></returns>


        private bool CallWebApi(PECMailErrorSummaryModel summaryModel, PECMailErrorStreamModel streamModel)
        {
            try
            {
                EventErrorStreamPECMail eventStream = new EventErrorStreamPECMail(streamModel.CorrelatedId,
                                                                                  DocSuiteContext.Current.CurrentTenant.TenantName, DocSuiteContext.Current.CurrentTenant.TenantId,
                                                                                  new IdentityContext(DocSuiteContext.Current.User.FullUserName), streamModel);

                EventErrorSummaryPECMail eventSummary = new EventErrorSummaryPECMail(streamModel.CorrelatedId,
                                                                                     DocSuiteContext.Current.CurrentTenant.TenantName, DocSuiteContext.Current.CurrentTenant.TenantId,
                                                                                     new IdentityContext(DocSuiteContext.Current.User.FullUserName), summaryModel);

                var webApiHelper = new WebAPIHelper();

                #region Spedizione Evento summary alle web api

                FileLogger.Info(_moduleName, "Spedizione dell\'evento summary alle WebAPI");
                bool sended = webApiHelper.SendRequest(DocSuiteContext.Current.CurrentTenant.WebApiClientConfig, DocSuiteContext.Current.CurrentTenant.WebApiClientConfig, eventSummary, string.Empty);
                if (!sended)
                {
                    FileLogger.Warn(_moduleName, "La fase di invio dell\'evento alle Web API non è avvenuta correttamente. Vedere log specifico per maggiori dettagli");
                    FileLogger.Info(_moduleName, "E' avvenuto un errore durante la fase di invio dell'evento EventErrorSummaryPecMail alle WebAPI");
                }
                FileLogger.Info(_moduleName, "Spedizione dell\'evento EventErrorSummaryPecMail alle WebAPI avvenuto correttamente");

                #region old (working) implementation
                //using (HttpClient _client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
                //{
                //    var content = new ObjectContent<EventErrorSummaryPECMail>(eventSummary, new JsonMediaTypeFormatter()
                //    {
                //        SerializerSettings = DocSuiteContext.DefaultWebAPIJsonSerializerSettings
                //    });
                //    var httpResponseMessage = _client.PostAsync("http://10.11.1.65:90/DSW.WebAPI/api/sb/Topic", content).Result;
                //};
                #endregion

                #endregion

                #region Spedizione Evento stream alle web api

                FileLogger.Info(_moduleName, "Spedizione dell\'evento stream alle WebAPI");
                sended = webApiHelper.SendRequest(DocSuiteContext.Current.CurrentTenant.WebApiClientConfig, DocSuiteContext.Current.CurrentTenant.WebApiClientConfig, eventStream, string.Empty);
                if (!sended)
                {
                    FileLogger.Warn(_moduleName, "La fase di invio dell\'evento alle Web API non è avvenuta correttamente. Vedere log specifico per maggiori dettagli");
                    FileLogger.Info(_moduleName, "E' avvenuto un errore durante la fase di invio dell'evento EventErrorStreamPecMail alle WebAPI");
                }
                FileLogger.Info(_moduleName, "Spedizione dell\'evento EventErrorStreamPecMail alle WebAPI avvenuto correttamente");

                #endregion

                return(true);
            }
            catch (Exception e)
            {
                FileLogger.Error(_moduleName, $"Error occured: " + e.Message);
                return(false);
            }
        }
Пример #2
0
        /// <summary>
        /// Funzione che effettua la scansione della cartella delle pec in errore e rielabora i tentativi falliti
        /// </summary>
        private void Scan()
        {
            try
            {
                Dictionary <string, bool> filesToElaborate = Directory.GetFiles(_errorFolder)
                                                             .Where(filePath => ThresholdIsValid(filePath) && OtherHalfExists(filePath))
                                                             .ToDictionary(x => x, x => false);

                while (filesToElaborate.Any(x => !x.Value))
                {
                    Guid correlationId = Guid.NewGuid();

                    //mi prendo il primo (prossimo) eml da elaborare
                    string currentEmlPath = filesToElaborate.First(x => x.Key.EndsWith(EmlExtension)).Key;

                    //cerco il suo file info
                    string currentXmlPath = filesToElaborate.First(x => x.Key.EndsWith(OtherHalfName(currentEmlPath))).Key;

                    MailInfo mailInfo = MailInfo.Load(currentXmlPath);
                    PECMailErrorSummaryModel summaryModel = new PECMailErrorSummaryModel()
                    {
                        CorrelatedId           = correlationId,
                        ProcessedErrorMessages = string.Join(Environment.NewLine, mailInfo.Errors),
                        Subject      = mailInfo.Subject,
                        Body         = mailInfo.Body,
                        Sender       = mailInfo.Sender,
                        Recipients   = mailInfo.Recipients,
                        ReceivedDate = mailInfo.Date,
                        Priority     = mailInfo.Priority,
                    };
                    PECMailErrorStreamModel streamModel = new PECMailErrorStreamModel()
                    {
                        CorrelatedId = correlationId,
                        Stream       = File.ReadAllBytes(currentEmlPath)
                    };

                    //gli segno come elaborati anche se magari la richiesta all api schianta, perche' non posso processari gli stessi all infinito, ma gli riprocesso al prossimo scan
                    filesToElaborate[currentXmlPath] = true;
                    filesToElaborate[currentEmlPath] = true;

                    bool requestWasSuccessfull = CallWebApi(summaryModel, streamModel);

                    if (requestWasSuccessfull)
                    {
                        File.Delete(currentEmlPath);

                        File.Delete(currentXmlPath);
                    }
                }
            }
            catch (Exception e)
            {
                FileLogger.Error(_moduleName, $"Error occured: {e.Message}");
            }
        }
Пример #3
0
        /// <summary>
        /// Evento che gestisce l'arrivo di un file nella cartella delle pec in errore
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnFileCreatedAsync(object sender, FileSystemEventArgs e)
        {
            try
            {
                //aspetta che il file finisca di essere copiato. Facciamo questo perche non viene copiato sempre tutto in un instante e l'evento scatta al primo bit copiato
                while (!IsFileReady(e.FullPath) && File.Exists(e.FullPath))
                {
                }

                if (OtherHalfExists(e.FullPath))
                {
                    Guid correlationId = new Guid();

                    string otherHalfPath = OtherHalfPath(e.FullPath);

                    PECMailErrorStreamModel streamModel = new PECMailErrorStreamModel()
                    {
                        CorrelatedId = correlationId,
                        Stream       = Path.GetExtension(e.FullPath) == EmlExtension?File.ReadAllBytes(e.FullPath) : File.ReadAllBytes(otherHalfPath)
                    };

                    MailInfo mailInfo = Path.GetExtension(e.FullPath) == EmlExtension?MailInfo.Load(otherHalfPath) : MailInfo.Load(e.FullPath);

                    PECMailErrorSummaryModel summaryModel = new PECMailErrorSummaryModel()
                    {
                        CorrelatedId           = correlationId,
                        ProcessedErrorMessages = string.Join(Environment.NewLine, mailInfo.Errors),
                        Subject      = mailInfo.Subject,
                        Body         = mailInfo.Body,
                        Sender       = mailInfo.Sender,
                        Recipients   = mailInfo.Recipients,
                        ReceivedDate = mailInfo.Date,
                        Priority     = mailInfo.Priority,
                    };

                    //effettua la chiamata all api
                    bool requestWasSuccessfull = CallWebApi(summaryModel, streamModel);

                    if (requestWasSuccessfull)
                    {
                        File.Delete(e.FullPath);
                        File.Delete(otherHalfPath);
                    }
                }
            }
            catch (Exception exception)
            {
                FileLogger.Error(_moduleName, $"Error occured: {exception.Message} ");
            }
        }