ASP Classic не может получить доступ к виртуальному каталогу с помощью FileSystemObject на IIS 7 - PullRequest
1 голос
/ 08 февраля 2011

У меня есть классический веб-сайт ASP, который мы переместили с IIS 6 на Win2k8 и IIS 7. В структуре папок веб-сайта находится виртуальный каталог с названием Продукты, содержащий JPG, которые физически хранятся в другом месте на том же сервере.

В веб-браузере любой JPG-файл продукта корректно отображается на странице. Например. http://www.MySite.com/images/poducts/widget.jpg работает удовольствие.

Однако эта папка недоступна при попытке доступа к ней в коде ASP с использованием FileSystemObject - все остальные файлы / папки есть, кроме Виртуального каталога. Вот пример фрагмента кода ASP:

Set objFSO = Server.CreateObject( "Scripting.FileSystemObject" )
Set objBaseFolder = objFSO.GetFolder( Server.Mappath( "../../Images" ) )
For Each objFolder In objBaseFolder.SubFolders  
    Response.Write( objFolder.Name & "<br>" )
Next
Set objFolder = Nothing
Set objBaseFolder = Nothing
Set objFSO = Nothing

Кроме того, ASPJpeg Com Object в Persit без проблем открывает и сохраняет JPG-файлы в / из этого виртуального каталога из ASP-кода.

В IIS7 на веб-сайте есть пул приложений, и я попробовал все настройки для его идентификации, но безрезультатно. Я также пытался применить различные параметры безопасности (IUSR_, Network Service и др.) К физической папке, на которую указывает виртуальный каталог, - даже предоставив полный контроль над «Все» в одной точке.

Похоже, что процесс ASP не имеет разрешения для виртуальных каталогов. Если у кого-то есть идеи о том, как решить эту проблему, я был бы очень признателен.

Ответы [ 3 ]

1 голос
/ 09 февраля 2011

Использование FileSystemObject для этого никогда не сработает, потому что оно работает только в физической файловой системе. Он не знает и не понимает виртуальные каталоги - этот аспект вашего сайта полностью управляется IIS.

Вопрос не в правах, а в том, что каталог физически не существует, поэтому просмотр физической файловой системы никогда его не увидит

IIS управляет виртуальными каталогами:

  • Переход к изображению в браузере работает, поскольку IIS автоматически сопоставляет виртуальный путь с соответствующим физическим путем.
  • Использование AspJpeg работает, скорее всего, потому что он использует вызовы Server.MapPath для преобразования данного пути в физический путь

Это не может быть проблемой с разрешениями, поскольку вы сами заявили, что AspJpeg может нормально читать и записывать в виртуальный каталог, а вы можете обращаться к нему через браузер.

0 голосов
/ 08 февраля 2011

нотация "../" не всегда разрешена по соображениям безопасности.Если у вас есть доступ к IIS, посмотрите, включен он или нет.

0 голосов
/ 08 февраля 2011

Я смутно помню, что у меня была такая проблема, и виновник был Server.Mappath. Чтобы решить ее, мне нужно было сопоставить файл внутри папки, а затем удалить часть файла

 Server.Mappath( "../../Images/dummy.gif")
...