2009-03-18 9 views
2

J'ai une application Web sur laquelle les utilisateurs peuvent télécharger des fichiers. Les fichiers sont physiquement stockés par IIS dans un dossier virtuel mappé à un périphérique de stockage externe. Un enregistrement de chaque fichier téléchargé est stocké dans la base de données. L'enregistrement de base de données contient des informations sur si le fichier est toujours "actif" (n'a pas été supprimé par l'utilisateur), et le chemin du dossier virtuel (ex:/storage1/test)Chemin du serveur de mappage en dehors d'IIS

Maintenant, j'aimerais, périodiquement , exécutez une tâche administrative en dehors d'IIS qui récupère une liste de tous les fichiers qui ne sont plus "actifs" et les supprime du stockage physique. Je souhaite que la tâche d'administration s'exécute en dehors d'IIS en tant que tâche planifiée ou service Windows. Toutefois, je n'arrive pas à comprendre comment mapper le chemin de dossier virtuel stocké dans l'enregistrement de base de données à un chemin physique, dans le processus externe. Existe-t-il un moyen de "puiser" dans IIS à partir d'un processus externe ou de toute autre manière intelligente de le faire? (Ou suis-je aller dans la mauvaise direction tout à fait).

TIA /Henrik

Répondre

2

Vous devez ajouter une référence à System.Web dans votre projet.

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite"); 
+0

Comment une bonne réponse acceptée a-t-elle été réduite à 0? –

0

Si votre application est une application ASP.NET, vous pouvez l'appel enquêtez Server.MapPath - si vous utilisez le même répertoire virtuel que l'application principale. Sinon, je suggère de stocker le "chemin de base" (qui correspond au chemin du répertoire virtuel) dans une configuration pour votre application externe et de concaténer ce chemin de base et le chemin du fichier dans un chemin complet.

Marc

0

Si vous devez récupérer ce chemin programme, vous pouvez faire quelque chose comme:

using(DirectoryEntry de = 
    new DirectoryEntry("IIS://Localhost/w3svc/1/root/storage1/test")) 
{ 
    string pathToFiles = de.Properties["Path"].Value; 

    // Do my file tidy up tasks.... 
} 

Il y a quelques choses à noter:

  • Le nombre ' 1 'dans le chemin du DirectoryEntry constructeur est le numéro IIS du site .

  • Dans le chemin IIS://Localhost/w3svc/1/root/storage1/test, la première partie IIS://Localhost/w3svc/1/root est 'root' l'application de votre site Web. Vous avez toujours besoin de cette partie.

  • Vous devez ajouter une référence à l'assemblage System.DirectoryServices à votre projet.

Questions connexes