24 messaggi dal 16 febbraio 2001
Salve a tutti. Più che una richiesta di programmazione vorrei un consiglio su quale strada scegliere.
Sto sviluppando un'applicazione webform che, tra le altre cose, deve inviare email PEC (e lo fa) e ricevere le relative ricevute di avvenuta consegna.
Ora l'invio è semplice e funziona perfettamente. Quello che mi sta mettendo in crisi è la questione della ricezione delle ricevute.
Avrei necessità che l'applicazione rimanga in ascolto in modo che appena arriva una mail nella casella di posta in arrivo, la recepisca e ci faccia determinate lavorazioni.
Ho pensato di affidare questo compito ad librerie quali Quartz.net che permettono di effettuare queste richieste in tempi determinati avviando i relativi job che mi servono.
L'altra opzione sarebbe quella di far effettuare questa ricerca ogni volta che si evidenzia la pagina che gestisce queste informazioni.
La prima soluzione sarebbe ottimale in quanto tutto il lavoro viene svolto in tempi prestabiliti con evidenziazione in tempo reale degli arrivi delle email ma il controllo del trigger generato è di difficile gestione in ambiente di produzione (il cliente non permette alcun intervento in tale ambiente) se non tramite opportuna applicazione.
La seconda è quella più "economica" in termini di programmazione e di gestione in quanto trasparente e, lavorando in maniera asincrona, non impatta molto sulle prestazioni dell'applicazione.
Secondo voi quale strada sarebbe la migliore da intraprendere?
Avete un'idea migliore delle mie?
Grazie.
11.726 messaggi dal 09 febbraio 2002
Contributi
Ciao,
usando Quartz.NET puoi certamente eseguire dei job a intervalli regolari, che ti permetteranno di recuperare le ricevute collegandoti via IMAP al server di posta.
Attenzione però perché se l'applicazione non riceve richieste da parte degli utenti, dopo un po' IIS "spegnerà" l'applicazione e perciò anche i job non verranno eseguiti.
Dovresti chiedere a chi gestisce il server di configurare la proprietà "StartMode" dell'application pool su "AlwaysRunning".
https://weblog.west-wind.com/posts/2013/oct/02/use-iis-application-initialization-for-keeping-aspnet-apps-alive
Credo che non avranno problemi ad assecondare questa richiesta se gli spieghi a cosa serve. Del resto non stai chiedendo di installare altre cose a livello di sistema.

Inoltre IMAP ha una una modalità IDLE che ti consente di essere notificato quando ci sono nuove e-mail. Potresti esplorare anche questa opportunità, anziché fare polling da un job di Quartz.NET. Non so se applicabile o utile nel tuo caso. Il server di posta potrebbe anche non supportare la funzionalità IDLE.
https://www.limilabs.com/blog/imap-idle


ma il controllo del trigger generato è di difficile gestione in ambiente di produzione (il cliente non permette alcun intervento in tale ambiente) se non tramite opportuna applicazione.

Non capisco cosa intendi con "controllo del trigger" e con "opportuna applicazione". Fai un esempio pratico.


La seconda è quella più "economica" in termini di programmazione e di gestione in quanto trasparente e, lavorando in maniera asincrona, non impatta molto sulle prestazioni dell'applicazione.

Non ho capito, ti riferisci all'opzione di scaricare le ricevute quando si richiede la pagina web?

ciao,
Moreno

Enjoy learning and just keep making
24 messaggi dal 16 febbraio 2001
Prima di tutto grazie per la risposta.
Ho guardato meglio la documentazione di Quartz.net ed esistono delle API che gestiscono l'esecuzione dei lavori. I trigger non sono altro che i processi in esecuzione (vengono chiamati così nel manuale).
La seconda opzione avvierebbe la richiesta delle ricevute ogni volta che si accede alla pagina web che le gestisce ovvero se la pagina fa vedere l'elenco delle ricevute, al suo caricamento avviene la scansione delle ricevute (soluzione molto artigianale).
Per quanto riguarda la richiesta da fare per l'installazione su IIS ci posso sempre provare ma, essendo una banca, la vedo dura.
Grazie comunque del consiglio. Penso di optare sicuramente per Quartz.net.
11.726 messaggi dal 09 febbraio 2002
Contributi
Ciao, grazie.


essendo una banca, la vedo dura

Non partire prevenuto perché il rischio maggiore per loro non è configurare l'"Always Running" sull'application pool, ma è stato in primo luogo decidere di installare codice fatto da altri su un loro server. Se hanno acconsentito a ciò, sicuramente si saranno premuniti per evitare che la tua applicazione possa accedere a sistemi a cui non ha il privilegio di accedere. E dunque non dovrebbero avere problemi all'acconsentire a questa richiesta.

Comunque, dato che non avrai tu stesso accesso al server, io ti consiglio di distribuirgli l'applicazione in forma di Web Deploy Package. Così, il loro amministratore di sistema dovrà semplicemente andare su IIS e installare il pacchetto grazie a un wizard visuale. In questo modo, credo che potrai configurare tu stesso l'AlwaysRunning sull'application pool, grazie alla configurazione presente nel pacchetto.

Ecco un paio di link per iniziare.
https://docs.microsoft.com/it-it/aspnet/web-forms/overview/deployment/web-deployment-in-the-enterprise/building-and-packaging-web-application-projects
https://stackoverflow.com/questions/13594670/how-to-configure-application-pool-with-msdeploy

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.