#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. Мне стыдно, я это помню
Хорошо, в любом случае, хорошо, что ваша проблема решена.