Utilizzo di un meccanismo di back-end per copiare i file su DB e notificare l'applicazione

4

Questo scenario: l'utente copia file di grandi dimensioni in una cartella locale. Voglio vedere quella cartella e quando un nuovo file viene rilasciato, quindi vai a copiarlo nel Database, quindi più tardi quando la copia è completa, posso effettivamente usarla nella mia applicazione. (Un'app di WinForms C #). Sarebbe fantastico anche trovare un modo per ottenere in qualche modo una notifica nell'applicazione che hey copiando il file in DB è finito e pronto per l'uso ...

Sto usando C # .net, Windows ... Quali soluzioni / architetture suggerisci per questo? Ad esempio, avere un servizio Windows in esecuzione tutto il tempo a guardare quella cartella, quando qualcosa copiato va e scriverlo in DB ... allora che ne dici di essere avvisati? MSMQ è qualcosa che posso usare? non ne so ancora molto.

Grazie.

    
posta Blake 16.06.2012 - 04:26
fonte

3 risposte

3

Hai due problemi separati:

  • monitoraggio e copia dei dati
  • notifica ai client

Monitoraggio : e copiare i dati nel database è un processo che si vorrebbe eseguire in background in modo da poterlo avviare e arrestare quando necessario indipendentemente dalla propria applicazione. Suggerisco di creare un servizio Windows che utilizza il watcher del filesystem . Prestare attenzione alla posizione dei file, l'applicazione di caricamento e il servizio devono entrambi accedere a tale posizione.

Un vecchio articolo su questo può essere trovato qui link (le cose sono cambiate dal 2007)

notifica della tua applicazione, è necessario essere in tempo reale? Quando l'applicazione si avvia ha bisogno di sapere che ci sono nuovi file in attesa?

Se l'applicazione deve controllare all'avvio, puoi semplicemente creare una tabella in cui il servizio tiene traccia dei file che ha elaborato e che l'app di Windows può interrogare per vedere se i file sono in attesa. Se la notifica non ha bisogno di essere in tempo reale, puoi attivare il controllo basato su un timer e avresti una soluzione piuttosto semplice.

Se la notifica deve essere in tempo reale, sono necessarie altre opzioni.

SignalR viene utilizzato principalmente nelle app Web, ma ho visto che funziona nelle app della console ed è piuttosto semplice da configurare e facile da usare. Se scarichi signalR link negli esempi, c'è un esempio di auto-hosting che potrebbe aiutarti ad accelerare. Rendi il tuo servizio messagehub e lascia che le applicazioni client si connettano all'avvio. SignalR è abbastanza nuovo e non ho visto molte persone usarlo al di fuori di un'app web, quindi potrebbe essere un rischio provarlo, ma dovrebbe essere divertente:)

Se non vuoi che signalR e stil abbiano bisogno di notifiche in tempo reale puoi guardare:

  • ha una cartella di stato nella cartella dei dati, il tuo servizio scrive i file di stato in questa cartella e l'applicazione controlla questa cartella di stato tramite watcher di fileSystem , mi piace perché la tua app e il servizio utilizzano le stesse tecnologie ed è sempre una buona idea mantenere il numero di tecnologie e il numero di soluzioni diverse come basso come possibile.
  • lascia che il servizio scriva in una coda di messaggi e chiedi alla tua app di monitorarlo (eccessivo nella mia mente)
  • crea il tuo servizio e l'app di Windows come l'applicazione di chat usando i messaggi di trasmissione WCF. Un esempio per iniziare: link (molto lavoro nella mia mente)
risposta data 16.06.2012 - 11:58
fonte
0

Puoi farlo in due modi: -

  1. Se la copia dei file viene eseguita tramite l'applicazione, puoi scrivere una parte di codice che ti invierà un'e-mail per la notifica.

  2. Se l'utente non sta utilizzando l'applicazione per caricare i file, è possibile scrivere uno script che verrà eseguito ogni 30 minuti e leggere la cartella in cui gli utenti caricano i file e se un nuovo file è trovato quindi inviare la notifica o eseguire l'azione richiesta sul file e informare l'utente e l'utente.

Spero che questo aiuti.

    
risposta data 16.06.2012 - 09:08
fonte
0

Se stai parlando di notifica dell'applicazione, non dell'utente, mi vengono in mente due modi per farlo:

  1. Crea e configura l'istanza di System.IO.FileSystemWatcher , hai il tuo applicazione che funziona sempre (ovvero nel vassoio di sistema) e reagisce come vuoi quando i file nella directory cambiano;
  2. Crea un servizio che ascolterà la directory e farà tutta la copia e comunicherà con l'applicazione principale tramite pipe.
risposta data 16.06.2012 - 09:23
fonte

Leggi altre domande sui tag