Классический сервер ASP.MapPath() не работает должным образом в global.asa

StackOverflow https://stackoverflow.com/questions/496524

Вопрос

В классическом ASP, Сервер.MapPath() не всегда работает должным образом в Приложение_onstart (запуск приложения) событие в рамках глобальный.asa.У меня есть страница ASP по адресу " estfolder est.asp" внутри виртуального корня у меня есть файл XSLT по адресу "\xsl ransform.xsl".Мой виртуальный корень находится в "c:\inetpub\wwwroot estapp \".

Я использую Маппат на странице ASP, чтобы получить полный путь к файлу XSLT.Вызов заключается в:

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

Несколько раз MapPath возвращается "c:\inetpub\wwwroot estapp\xsl ransform.xsl " как и ожидалось, в других случаях он неправильно возвращает "c:\inetpub\wwwroot estapp\тестовая папка\xsl ransform.xsl".Очевидно, что неправильный путь вызывает серьезные проблемы.

Это было полезно?

Решение

Здесь я отвечаю на свой собственный вопрос:

Эта проблема возникает из-за того, что при вызове в Приложение_onstart (запуск приложения), Маппат неправильно включает контекст страницы, которая вызвала запуск приложения.Если первая страница ASP, которая будет запущена, когда приложение еще не запущено, не находится в корневом каталоге виртуального корня, то Маппат запутывается и добавляет путь к вызываемой ASP-странице к пути, который она возвращает.

Так, например, если страница, на которой было запущено приложение, находилась в "c:\inetpub\wwwroot estapp\folder1\folder2 est.asp " тогда MapPath неправильно добавил бы "\папка 1\папка 2" дойди до середины пути и возвращайся "c:\inetpub\wwwroot estapp\folder1\folder2\xsl ransform.xsl "

Если ваш веб-сайт имеет файлы только в корневой папке или не использует Маппат в глобальный.asa тогда вы никогда не заметите этой маленькой странности.Я подозреваю, что существует множество сайтов ASP Classic, которые иногда из-за этого не запускаются должным образом, но их владельцы просто выполняют быструю настройку iisreset, не зная, что именно пошло не так.

Результатом этого является то, что вы не можете надежно использовать Маппат в глобальный.asa если у вас есть веб-сайт, на котором есть ASP-файлы где угодно, кроме корневой папки.

Если это одноразовый веб-сайт, то самое простое решение - просто жестко закодировать любые пути, которые вы используете в глобальный.asa.

Если вы продаете продукт другим людям на основе ASP Classic, то жесткое кодирование путей - это не вариант.Вы либо должны перенести все использование Маппат из запуска приложения или устраните проблему, записав пути к вашим ASP-файлам как часть программы установки.

Другие советы

в качестве альтернативы используйте sXslPath = сервер.MapPath("\xsl ransform.xsl")

который затем отобразит путь из корневого каталога

естественно, если вы разрабатываете на iis в ОС, которая не является сервером, root будет веб-сайтом по умолчанию, вам нужно будет не забыть изменить его при развертывании...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top