Mapping-Server-Pfad außerhalb IIS
-
19-08-2019 - |
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
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 derDirectoryEntry
Konstruktor ist die IIS Anzahl der Seiten. -
In dem Pfad
IIS://Localhost/w3svc/1/root/storage1/test
, Der erste TeilIIS://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.