Проверить, существует ли файл с удаленного сервера

у меня есть приложение, которое требует разрешения на доступ к файлу на удаленном сервере.

Мое приложение находится на сервере A, а файл, к которому я хочу получить доступ, находится на сервере B. Эти 2 сервера находятся в одном домене.

Я создал виртуальный каталог на сервере A для каталога на сервере B. Имя виртуального каталога — FolderFromServerB, а его путь — \ServerB\Folder. Я использую пользователя для аутентификации, и когда я проверяю соединение в IIS, он говорит, что все в порядке.

Кроме того, когда я помещаю тег привязки в тестовый файл, как показано ниже, я могу получить доступ к файлу, и содержимое отображается на странице:

<a href="FolderFromServerB/test.txt">Test file</a> -->  **This works**

Но моя проблема в том, что когда я использую код, чтобы узнать, существует ли этот файл или нет, он всегда возвращает False. Мой код выглядит следующим образом:

FileInfo fi = new FileInfo(@\FolderFromServerB/test.txt); --› Это не работает

Ответ.Запись(fi.Exists); --› Это всегда 'False'

Я предоставил разрешение «Полный доступ» своему пользователю, СЕТЕВОЙ СЛУЖБЕ, всем и администраторам на сервере B, но я тоже не работал.

Как я могу заставить его работать?

На прошлой неделе работало. Я предполагаю, что сервер обновился, и некоторые обновления произошли, но я не смог найти никакого обходного пути. Сейчас я в отчаянии, и мне нужно изменить весь мой код и потратить много времени, чтобы заставить его работать.


person Erdem Gundogdu    schedule 13.10.2014    source источник
comment
виртуальный каталог существует только на уровне веб-сервера. Я сомневаюсь, что ваш код С# будет знать о его существовании, потому что С# имеет дело непосредственно с файловой системой. это было бы эквивалентно Apache Alias, который также существует на уровне веб-сервера.   -  person Marc B    schedule 13.10.2014
comment
Чего вы пытаетесь достичь? Я думаю, вы столкнулись с проблемой XY. Мы можем лучше помочь вам, если вы опишете свою цель, а не то, как вы хотите ее достичь. Какие данные в этом файле? На самом деле, я считаю, что это плохая практика доступа к данным файловой системы. Или, если быть более точным, если приложению нужно работать с данными, я обычно создаю временный каталог вне приложения, где я устанавливаю правильное разрешение для пользовательского пула приложений.   -  person Steve B    schedule 13.10.2014


Ответы (2)


Я нашел обходной путь, который находится в web.config :

<identity impersonate="true"  userName="{domain}\{username}" password="{password}"/>

Я использовал File.Exist() в течение нескольких месяцев, но затем он внезапно исчез и не работал, и я не знаю, почему. Но это решение выше.

person Erdem Gundogdu    schedule 13.10.2014
comment
Вы должны установить идентификатор приложения в свойствах пула приложений. - person Steve B; 13.10.2014

Ваш код не работает, потому что текущая папка выполнения приложения ASP.Net — это не папка вашего приложения, а c:\windows\system32.

Когда вы создаете объект FileInfo, вы пытаетесь прочитать c:\windows\system32\FolderFromServerB\test.txt.

<a href="FolderFromServerB/test.txt"> работает, потому что ссылка будет относиться к текущей странице (она не будет работать, если страница находится в другом каталоге).

Если файл, который вы ищете, находится в каталоге вашего приложения, вы можете преобразовать виртуальный путь в физический, используя:

string actualFilePath = HttpContext.Current.Server.MapPath("~/FolderFromServerB/test.txt");
FileInfo fi = new FileInfo(actualFilePath);
person Steve B    schedule 13.10.2014