Не удается найти путь к другому серверу в ASP. NET MVC - PullRequest
0 голосов
/ 18 марта 2020

У меня есть внутренний ASP. NET MVC сайт, который должен прочитать файл Excel. Файл находится на сервере, отличном от того, на котором работает ASP. NET MVC, и для предотвращения проблем с доступом я пытаюсь скопировать его на ASP. NET MVC сервер.

На моем компьютере разработчика он работает нормально, но когда он развернут на сервере, он не видит путь.

Это код срубленной модели (C#):

string fPath = HttpContext.Current.Server.MapPath(@"/virtualdir");
string fName = fPath + "test.xlsm"; 

if (System.IO.File.Exists(fName))
{
    // Copy the file and do what's necessary
}
else
{
    if (!Directory.Exists(fPath))
        throw new Exception($"Directory not found: {fPath} ");
    else
        throw new Exception($"File not found: {fName } ");
}

Я получаю ошибку:

Каталог не найден:

, за которым следует путь.

путь в ошибке правильный - я скопировал и вставил его в проводник, и он разрешается. ОК.

Я попытался использовать полный путь UN C, подключенный сетевой диск и виртуальный каталог (как в коде выше). При необходимости им были предоставлены права сетевого администратора (только для тестирования!), Но все равно ничего не получалось.

Внутренний веб-сайт использует сквозную аутентификацию, но я использовал определенные c учетные данные с полными правами администратора для виртуальный каталог, и виртуальный каталог в IIS расширяется OK до требуемой папки.

Я также пытался предоставить пулу приложений (который работает в интегрированном режиме) полные права администратора сети.

I Надеюсь, я просто упустил что-то простое, и это не «функция безопасности».

Я нашел этот вопрос Копирование файлов между серверами asp. net mvc но ответом было использование FTP, и я не хочу go идти по этому маршруту, если смогу его избежать.

Любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 18 марта 2020

Во-первых, чтобы быть в безопасности от правильной сборки вашего каталога, я бы использовал Path.Combine.

string fName = Path.Combine(fPath, "test.xlsm")

Во-вторых, я бы проверил следующий пост и попробовал кое-что там, как это похоже, похожая проблема.

Directory.Exists не работает для сетевого пути

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...