Frage

Im klassischen ASP, Server.MapPath () funktioniert nicht immer richtig in dem Application_OnStart Ereignisse innerhalb von global.asa . Ich habe eine ASP-Seite auf "\ testfolder \ test.asp" innerhalb einer virtuellen Wurzel, ich habe eine XSLT-Datei auf "\ xsl \ Transform.xsl" . Meine virtuelle Wurzel liegt in der . "C: \ inetpub \ wwwroot \ testapp \"

ich MapPath in der ASP-Seite den vollständigen Pfad zu der XSLT-Datei zu erhalten. Der Aufruf lautet:

sXslPath = Server.MapPath("xsl\transform.xsl")

Einige Male MapPath kehrt "c: \ inetpub \ wwwroot \ testapp \ xsl \ Transform.xsl" , wie erwartet, zu anderen Zeiten es falsch zurück "c: \ inetpub \ wwwroot \ testapp \ testfolder \ xsl \ Transform.xsl ". Der falsche Weg führt offensichtlich schwerwiegende Probleme.

War es hilfreich?

Lösung

Ich bin meine eigene Frage zu beantworten hier:

Dieses Problem tritt auf, wenn da in genannt Application_OnStart , MapPath enthält fälschlicherweise den Kontext der Seite, die die Anwendung verursachte die Inbetriebnahme. Wenn die erste Seite ASP ausgeführt werden, wenn die Anwendung noch nicht gestartet ist nicht in der Wurzel des virtuellen Stammes dann MapPath wird verwirrt und fügt den Pfad zu der genannten ASP-Seite auf den Weg gibt es .

So zum Beispiel, wenn die Seite, die die App war in "c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ test.asp" gestartet dann würde MapPath falsch hinzufügen "\ folder1 \ folder2 " in der Mitte des Weges und zurück " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ xsl \ Transform.xsl "

Wenn nur Ihre Website-Dateien im Stammordner hat oder nicht verwendet MapPath in global.asa , dann werden Sie nie diese kleine Kuriosität bemerken. Ich vermute, es gibt viele ASP Klassische Websites gibt, die wegen dieser richtig manchmal bis zur Inbetriebnahme scheitern, aber ihre Besitzer einfach eine schnelle Iisreset, nicht zu wissen, was ziemlich schief gelaufen ist.

Das Ergebnis davon ist, dass Sie nicht zuverlässig verwenden können MapPath in global.asa , wenn Sie eine Website, die ASP hat Dateien irgendwo anders als nur den Stammordner .

Wenn es sich um eine einmalige Website dann die einfachste Lösung ist, nur schwer Code alle Pfade, die Sie verwenden in global.asa .

Wenn Sie ein Produkt auf andere Menschen basiert auf ASP-Klassiker verkaufen dann die Pfade harte Kodierung ist keine Option. Sie müssen entweder die gesamte Nutzung von MapPath , um aus dem Programmstart oder mit der Frage beschäftigen, indem Pfade in Ihre ASP-Dateien als Teil des Installationsprogrammes zu schreiben.

Andere Tipps

alternativ verwenden sXslPath = Server.MapPath ( "\ xsl \ Transform.xsl")

, welche dann den Pfad aus dem Stammverzeichnis der Karte

natürlich, wenn Sie auf iis in einem O entwickeln, der kein Server ist, wird root die Standard-Website sein, würden Sie müssen bedenken, über den Einsatz zu ändern ...

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