Frage

Ich habe einen Web-App, wo Benutzer Dateien hochladen können. Die Dateien werden physikalisch durch IIS in einem virtuellen Ordner gespeichert, der auf ein externes Speichergerät abgebildet wird. Eine Aufzeichnung über jede hochgeladene Datei wird in der Datenbank gespeichert. Der Datenbank-Datensatz enthält Informationen darüber, ob die Datei noch „aktiv“ (nicht vom Benutzer gelöscht) und der virtuelle Ordnerpfad (zB: / storage1 / Test)

Nun, ich möchte, in regelmäßigen Abständen, eine administrative Aufgabe außerhalb IIS ausführen, die eine Liste aller Dateien abruft, die nicht mehr „aktiv“ sind und löscht diese aus physischen Speicher. Ich möchte die administrative Aufgabe außerhalb IIS als geplante Task oder Windows-Dienst auszuführen. Aber ich kann nicht herausfinden, wie man den virtuellen Ordnerpfad kartieren, die in dem Datenbank-Datensatz auf einen physischen Pfad gespeichert ist, in dem externen Prozess. Gibt es eine Möglichkeit zu „tippen“ in IIS von einem externen Prozess oder andere intelligente Art und Weise, dies zu tun? (Oder bin ich in der falschen Richtung insgesamt).

TIA / Henrik

War es hilfreich?

Lösung

Sie müssen einen Verweis auf System.Web in einem Projekt hinzuzufügen.

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

Andere Tipps

Wenn Ihre App eine ASP.NET-Anwendung ist, könnten Sie den Server.MapPath Anruf untersuchen -. Wenn Sie das gleiche virtuelle Verzeichnis als Haupt App verwenden

Ansonsten würde ich vorschlagen, den „Basispfad“ speichere (das entspricht den Pfad der virtuellen Verzeichnisses) in einer Konfiguration für Ihre externe App und genau das Basispfad und den Dateipfad in einen vollständigen Pfad verketten.

Marc

Wenn Sie diesen Pfad abrufen müssen programmatisch dann können Sie so etwas wie:

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

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

Es gibt ein paar Dinge zu beachten:

  • Die Zahl ‚1‘ auf dem Weg der DirectoryEntry Konstruktor ist die IIS Anzahl der Seiten.

  • In dem Pfad IIS://Localhost/w3svc/1/root/storage1/test, Der erste Teil IIS://Localhost/w3svc/1/root ist ‚Root‘ Anwendung, um Ihre Website. Sie müssen immer diesen Teil.

  • Sie müssten einen Verweis auf hinzufügen die System.DirectoryServices Montage an einem Projekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top