47 messaggi dal 27 ottobre 2014
Ciao a tutti,

grazie ai vostri consigli ed a qualche progetto di esempio, sono riuscito a sviluppare un piccolo progetto attualmente gia' operativo.

La mia domanda e' questa:

E' possibile gestire delle azioni automatiche (p.e. invio di email), conseguenti all'upload via ftp di uno o piu' files?

In pratica la mia esigenza e' quella di notificare automaticamente ad un utente, che sul sito e' disponibile un nuovo file che lo riguarda.

Grazie in anticipo per qualsiasi consiglio o segnalazione di esempi.

Enzo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Enzo,
è possibile ma c'è uno scoglio da superare: monitorare la cartella in cui vengono caricati i file FTP per determinare in tempo reale (o quasi) quali cambiamenti sono stati apportati.

Se la cartella in cui vengono caricati i file si trova nello stesso server della tua applicazione web, allora puoi monitorarla abbastanza facilmente usando la classe FileSystemWatcher.

In fondo a questa pagina c'è un esempio completo di come usare tale classe.
https://msdn.microsoft.com/it-it/library/System.IO.FileSystemWatcher(v=vs.110).aspx

In pratica, avvii il monitoraggio impostando EnableRaisingEvents a true e poi reagisci almeno all'evento Created per inviare l'email o compiere altre operazioni di notifica in tempo reale (es. con SignalR). Se ti interessa gestire anche gli aggiornamenti, le eliminazioni e gli spostamenti, ci sono gli eventi Changed, Deleted e Renamed.

Puoi metterti a monitorare la cartella all'avvio dell'applicazione, ad esempio dal metodo Application_Start del global.asax.

Se invece i file non vengono salvati nello stesso server, vedi se riesci ad arrivarci comunque con una share di rete. Il FileSystemWatcher dovrebbe funzionare anche in quel caso.

ciao,
Moreno

Enjoy learning and just keep making
47 messaggi dal 27 ottobre 2014
Ciao Moreno,

in effetti la realizzazione del mio progetto la devo principalmente ai tuoi consigli ed alle tue puntuali risposte quindi, grazie ancora.

Riguardo alla classe FilesystemWatcher da te segnalata, in effetti ci ero arrivato tramite ricerche varie, ma ho pensato (scusa l'ignoranza in materia) che avrei dovuto utilizzarla in una applicazione che dovesse girare in maniera autonoma e continua sul server, scollegata dalle istanze dei vari client (e questo non so se e' giusto, se si puo' fare e come).

L'idea che mi sono fatto sulle applicazioni web, e' che per ogni utente che si collega al sito digitandone la relativa URL, viene lanciata un'istanza dell'applicazione .... in questo caso, se nessun utente e' on-line, non ci sono applicazioni attive in grado di intercettare gli upload .... NON E' COSI'???

Mi rendo conto che avrei bisogno di un bel corso "for dummies" .... se solo li organizzaste un po' piu' a sud ... (ma mi sa che prima o poi lo dovro' fare, specialmente se questo mio progetto avra' uno sviluppo numericamente consistente).

Grazie ancora, un saluto.
Enzo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Enzo,


in questo caso, se nessun utente e' on-line, non ci sono applicazioni attive in grado di intercettare gli upload .... NON E' COSI'???

Non è esatto.
C'è una sola "istanza" dell'applicazione che vive dentro il processo w3wp.exe gestito da IIS.
Quando arriva una richiesta per l'applicazione, IIS verifica se tale processo è già in esecuzione oppure no. Se non è in esecuzione, lo avvia e carica l'applicazione in memoria. Il processo resta in esecuzione, in attesa di successive richieste. Se non dovessero arrivare richieste per un certo numero di minuti (20 di default), allora IIS arresta il processo e quindi l'applicazione viene scaricata dalla memoria.

Si può configurare IIS affinché avvii il processo in maniera proattiva, senza attendere che arrivi la prima richiesta. Bisogna impostare "Start Mode" su "Always Running" dell'application pool in cui è inserita l'applicazione.
http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html
https://developers.de/blogs/damir_dobric/archive/2009/10/11/iis-7-5-and-always-running-web-applications.aspx

Inoltre, si può impostare l'Idle Timeout a 0, in modo da disabilitarlo (sempre dalle proprietà avanzate dell'application pool). In questo modo, l'applicazione resterà sempre in esecuzione, anche quando non arrivano richieste.
Quindi, con questa opportuna configurazione, un'applicazione ASP.NET può girare in maniera autonoma e continua.

Puoi avviare il FileSystemWatcher dal metodo Application_Start del global.asax e arrestarlo dall'Application_End.

ciao,
Moreno

Enjoy learning and just keep making
47 messaggi dal 27 ottobre 2014
Ciao Moreno,

grazie per l'esauriente risposta ... spero di non avere difficolta' nell'applicare le modifiche segnalate ...

Grazie ancora.
Saluti.

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.