Question

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é sur 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 indiquant si le fichier est toujours "actif". (n'a pas été supprimé par l'utilisateur) et le chemin du dossier virtuel (ex: / storage1 / test)

Maintenant, j'aimerais exécuter périodiquement 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 administrative soit exécutée en dehors d'IIS en tant que tâche planifiée ou service Windows. Cependant, je ne sais pas comment mapper le chemin du dossier virtuel stocké dans l'enregistrement de la base de données sur un chemin physique, dans le processus externe. Existe-t-il un moyen de "tapoter"? dans IIS à partir d'un processus externe ou de tout autre moyen intelligent de le faire? (ou suis-je dans la mauvaise direction?)

TIA / Henrik

Était-ce utile?

La solution

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

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

Autres conseils

Si votre application est une application ASP.NET, vous pouvez étudier l'appel Server.MapPath, si vous utilisez le même répertoire virtuel que l'application principale.

Sinon, je suggérerais de stocker le "chemin de base". (qui correspond au chemin du répertoire virtuel) dans une configuration pour votre application externe et concaténant simplement le chemin de base et le chemin de fichier en un chemin complet.

Marc

Si vous avez besoin de récupérer ce chemin par programmation, 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 points à noter:

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

  • Dans le chemin IIS: // hôte local / w3svc / 1 / racine / storage1 / test , la première partie IIS: // hôte local / w3svc / 1 / racine est l'application "racine" de votre site Web. Vous avez toujours besoin de cette partie.

  • Il vous faudrait ajouter une référence à le System.DirectoryServices assemblage à votre projet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top