Rileva quando un file viene creato (su un server web) e pronto per l'uso in una delle tante directory

0

Ho un bug strano, intermittente che sta accadendo su un server web.

Uno dei metodi attiva la creazione di un piccolo file (3kb), in una cartella. La cartella si basa sull'anno corrente, sul mese e sull'ID posizione.

Il file viene creato da un componente di terze parti su cui non ho alcun controllo, tranne che chiamando il suo metodo CreateImage() .

Gli sviluppatori di questo componente hanno confermato che consegnano la creazione del file al sistema operativo e quindi restituiscono senza verificare se la creazione è avvenuta. (Nizza).

Quello che proviamo a fare è aprire questo file e scrivere su di esso un codice di autorizzazione specifico. Tuttavia, occasionalmente i file di registro stanno recuperando un System.ArgumentException: Parameter is not valid quando chiamo Bitmap bmpImage = new Bitmap(filename); In base a MSDN, questa eccezione indica che il file non è un file immagine o che non è effettivamente lì.

Non posso influenzare il componente di terze parti, ma sono abbastanza sicuro che l'esecuzione di una FileSystemWatcher su un processo di un sito Web non lo taglierà, né c'è alcun tipo di chiamata di blocco in cui aspetto un importo sconosciuto di tempo per il file da creare. L'unica altra soluzione che mi viene in mente è quella di controllare se il file è lì, in caso contrario, controllare dopo un secondo e poi una terza volta. Se dopotutto non è presente, lanciare un'eccezione. Ma sembra più una "raffica" che una correzione.

Non posso mettere queste creazioni e alterazioni di immagine in una sorta di coda o altro processo, poiché l'immagine aggiornata viene visualizzata all'utente nella pagina successiva.

Ho perso qualche ovvia soluzione al mio problema qui, prima di dover tornare indietro e provare a re-inventare l'intero processo (che sembra eccessivo per forse 1 su 500) causando un problema?

    
posta Matt 20.11.2017 - 17:08
fonte

2 risposte

2

Se crei un sistema di componenti diversi che non hai sotto il tuo controllo, a determinati livelli di complessità alcuni componenti falliranno a volte. Ciò è particolarmente vero quando il tuo sistema coinvolge diverse macchine, hardware e reti, ma a volte può accadere anche su una sola macchina.

L'unico approccio sensato per questo lo so è rendere il tuo software più robusto e tollerante ai guasti . I meccanismi di ripetizione dei tentativi sono un modo standard per farlo (oltre alla ridondanza), non sono una "scusa", come l'hai chiamata tu. Ecco un esempio (Apache Flink) per un altro sistema che crea robustezza usando una meccanica retry. Forse puoi risolvere il tuo problema in modo simile.

    
risposta data 20.11.2017 - 20:54
fonte
0

Per rispondere alla domanda nel titolo:

Detect when a file is created (on a webserver) ?

Ovviamente file system e sistema operativo specifico.

Tuttavia, la maggior parte dei server Web sta eseguendo alcune varianti di Linux oggi. Quindi, se il file system è locale (non uno remoto come NFS o CIFS) e appropriato per Linux (es. Ext4, BTRFS, XFS, ... ma non VFAT o NTFS) allora potresti considerare inotify(7) strumenti per rilevare la creazione di file.

Potresti utilizzare inotifywait (1) & inotifywatch (1) comandi o incron daemon (o codifica il tuo programma sopra inotify chiamate di sistema correlate).

    
risposta data 21.11.2017 - 09:13
fonte

Leggi altre domande sui tag