Domanda

Nell'ASP classico, Server.MapPath () non sempre funziona correttamente nell'evento Application_OnStart all'interno di global.asa . Ho una pagina ASP in & Quot; \ testfolder \ test.asp & Quot; all'interno di una radice virtuale, ho un file XSLT in & Quot; \ xsl \ transform.xsl quot &; . La mia radice virtuale si trova in & Quot; c: \ inetpub \ wwwroot \ testapp \ & Quot; .

Uso MapPath nella pagina ASP per ottenere il percorso completo del file XSLT. La chiamata è:

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

Alcune volte MapPath restituisce " c: \ inetpub \ wwwroot \ testapp \ xsl \ transform.xsl " come previsto, altre volte restituisce in modo errato < !> quot; c: \ inetpub \ wwwroot \ testapp \ testfolder \ xsl \ transform.xsl <> quot; !. Il percorso errato ovviamente causa seri problemi.

È stato utile?

Soluzione

Sto rispondendo alla mia domanda qui:

Questo problema si verifica perché quando chiamato in Application_OnStart , MapPath include erroneamente il contesto della pagina che ha causato l'avvio dell'applicazione. Se la prima pagina ASP da eseguire quando l'applicazione non è ancora stata avviata non si trova nella radice della radice virtuale, MapPath viene confuso e aggiunge il percorso alla pagina ASP chiamata al percorso che restituisce .

Ad esempio, se la pagina che ha avviato l'app era in " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ test.asp " quindi MapPath aggiungerebbe erroneamente " \ folder1 \ folder2 " nel mezzo del percorso e restituire " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ xsl \ transform.xsl quot &;

Se il tuo sito Web contiene solo file nella cartella principale o non utilizza MapPath in global.asa , non noterai mai questa piccola stranezza. Ho il sospetto che ci siano molti siti ASP Classic là fuori che a volte non riescono ad avviarsi correttamente a causa di questo, ma i loro proprietari fanno solo un rapido iisreset, non sapendo cosa è andato storto.

Il risultato è che non è possibile utilizzare in modo affidabile MapPath in global.asa se si dispone di un sito Web che contiene file ASP in qualsiasi luogo diverso dalla cartella principale .

Se si tratta di un sito Web unico, la soluzione più semplice è semplicemente codificare qualsiasi percorso che usi in global.asa .

Se vendi un prodotto ad altre persone in base ad ASP Classic, la codifica effettiva dei percorsi non è un'opzione. Devi spostare qualsiasi utilizzo di MapPath dall'avvio dell'applicazione o affrontare il problema scrivendo i percorsi nei file ASP come parte del programma di installazione.

Altri suggerimenti

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

che quindi mapperà il percorso dalla directory principale

naturalmente se stai sviluppando su iOS in un sistema operativo che non è un server, root sarà il sito Web predefinito, dovresti ricordare di cambiare al momento della distribuzione ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top