Ошибка доступа, когда я пытаюсь сделать запрос не из среды разработки

#c# #asp.net #sharepoint

#c# #asp.net #sharepoint

Вопрос:

Итак, у меня в основном есть sharepoint asp.net страница и кнопка, которая выполняет эту операцию копирования

 System.IO.File.Copy("\\server.name\folder\folder\123.txt", Server.MapPath("\\WebserverTempFileCopy\123.txt"), true);
  

Проблема в том, что если я делаю это из среды разработки, все работает нормально, но если я попытаюсь сделать это извне, всплывает ошибка 403 FORBIDDEN, в основном она не может быть достигнута «\server.namefolderfolder123.txt » по какой-то причине, и я понятия не имею, почему.

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

Я новичок в asp.net и sharepoint, так что, возможно, это простой и глупый вопрос, но все равно спасибо.

Ответ №1:

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

Комментарии:

1. Доступ был предоставлен идентификатору пула приложений, но все та же ошибка. Любые другие предложения?

2. вы пытались обернуть этот фрагмент кода try...catch и, если внутри возникает исключение, записать его где-нибудь. Я не работал с sharepoint слишком долго, но также помните, что есть какой-то способ изучить журналы вашего сайта sharepoint, вы проверили это?

3. Да, «Доступ к пути’\ server.name folder folder …’ запрещен». Я очень новичок в sharepoint и понимаю, как веб-сервер работает с таким запросом файла. Но на данный момент доступ был предоставлен, может быть, есть что-то еще, к чему может потребоваться доступ?

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

5. Уже пробовал это, он возвращает мое текущее системное имя пользователя, а не пользователя пула приложений или что-то еще.

Ответ №2:

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

Но это сначала также не решило проблему.

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

 SPSecurity.RunWithElevatedPrivileges(delegate()
                {
              //Code here
                });
  

Комментарии:

1. Мне стыдно, я это помню 🙂 Хорошо, в любом случае, хорошо, что ваша проблема решена.