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

È stato utile?

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 costruttore DirectoryEntry è il Numero IIS del sito.

  • Nel percorso IIS: // Localhost / w3svc / 1 / root / Storage1 / test , la prima parte IIS: // 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top