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