Mapping del percorso del server all'esterno di IIS
-
19-08-2019 - |
Domanda
Ho un'app Web in cui gli utenti possono caricare file. I file vengono archiviati fisicamente da IIS in una cartella virtuale mappata su un dispositivo di archiviazione esterno. Un record relativo a ciascun file caricato viene archiviato nel database. Il record del database contiene informazioni sul fatto che il file sia ancora "attivo". (non è stato eliminato dall'utente) e il percorso della cartella virtuale (es: / storage1 / test)
Ora, vorrei, periodicamente, eseguire un'attività amministrativa al di fuori di IIS che recupera un elenco di tutti i file che non sono più "attivi". e li elimina dalla memoria fisica. Vorrei che l'attività amministrativa venisse eseguita all'esterno di IIS come attività pianificata o servizio Windows. Tuttavia, non riesco a capire come mappare il percorso della cartella virtuale memorizzato nel record del database su un percorso fisico, nel processo esterno. Esiste un modo per " toccare " in IIS da un processo esterno o qualsiasi altro modo intelligente per farlo? (o sto andando nella direzione sbagliata del tutto).
TIA / Henrik
Soluzione
Dovrai aggiungere un riferimento a System.Web nel tuo progetto.
string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");
Altri suggerimenti
Se l'app è un'app ASP.NET, è possibile esaminare la chiamata Server.MapPath - se si utilizza la stessa directory virtuale dell'app principale.
Altrimenti, suggerirei di memorizzare il " percorso base " (che corrisponde al percorso della directory virtuale) in una configurazione per l'app esterna e concatenando quel percorso di base e il percorso del file in un percorso completo.
Marc
Se devi recuperare questo percorso a livello di codice, puoi fare qualcosa del tipo:
using(DirectoryEntry de =
new DirectoryEntry("IIS://Localhost/w3svc/1/root/storage1/test"))
{
string pathToFiles = de.Properties["Path"].Value;
// Do my file tidy up tasks....
}
Ci sono un paio di cose da notare:
-
Il numero '
1
' nel percorso di Il costruttoreDirectoryEntry
è il Numero IIS del sito. -
Nel percorso
IIS: // Localhost / w3svc / 1 / root / Storage1 / test
, la prima parteIIS: // Localhost / w3svc / 1 / root
è l'applicazione "root" del tuo sito web. Hai sempre bisogno di questa parte. -
Dovresti aggiungere un riferimento a il
System.DirectoryServices
assemblaggio al progetto.