Я создаю каталоги и записываю файлы в общую папку в моем веб-приложении, которое размещается на Windows Server 2008. Я запускаю пул приложений с удостоверением ApplicationPoolIdentity.
Чтобы дать вам представление о моих настройках… Я установил права доступа к корню корневого каталога моего веб-приложения для двух разных пользователей: «IUSR» и «IIS APPPOOL \ MYPOOL». Я использую имя «MYPOOL» в качестве имени моего пула приложений, поэтому на него легко ссылаться.
Приложение не может изменять и записывать в общую папку. Я щелкнул правой кнопкой мыши общую папку, в которой я создаю каталоги и в которую пишу, и щелкнул вкладку «Безопасность». Затем я нажал «Редактировать». Под объектами я проверил "Компьютер". Затем в разделе "МЕСТОПОЛОЖЕНИЕ" я попробовал компьютер / сервер, на котором работает мое веб-приложение. Однако я не смог найти своего пользователя "MYPOOL" под пользователями. Я пытался перейти по этой ссылке, но она была не очень полной. Я не знаю, какого пользователя использовать. Я продолжаю получать исключение System.IO, потому что у него нет разрешений. Как только я узнаю, какого пользователя использовать, мне нужно будет предоставить разрешения «Изменить» для каталога «ExportPath».
У меня это не сработало: http://grekai.wordpress.com/2011/05/23/permissions-for-shared-folder-for-iis-7-application-pool-identity-across-domain/
Для быстрого теста я сделал фиктивную страницу с именем FilePermissionsTest.aspx и поместил код для записи файла, чтобы создать каталог и записать файл в мое событие Page_Load кода позади. Но я еще не успел проверить это, потому что он не будет записывать файл.
...
<div>
Check to see if the file "_File_Permissions_Test.txt" was written to <% Response.Write(Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing))%>
</div>
...
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim exportPath As String = Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing)
If exportPath = String.Empty Then Return
Dim exportDirectory As DirectoryInfo = Directory.CreateDirectory(exportPath)
Dim writer As StreamWriter = File.CreateText(Path.Combine(exportDirectory.FullName, "_File_Permissions_Test.txt"))
writer.WriteLine("TESTING... " + DateTime.Now().ToString)
writer.Flush()
writer.Close()
End Sub
Если вы запускаете пул приложений с использованием указанного удостоверения, предоставление разрешения учетной записи компьютера не сработает. Вы должны запустить пул приложений с учетной записью домена и предоставить этой учетной записи соответствующие разрешения для общей папки. Использование локальной учетной записи также не будет работать, если общая папка находится на удаленном компьютере.
Если у вас нет домена, вы можете запустить AppPool с помощью LocalSystem, и это должно работать с предоставлением разрешения учетной записи компьютера для общей папки. Но это, вероятно, было бы неоптимально с точки зрения безопасности.
Вы должны были ввести имя компьютера, а не ApplicationPoolIdentity. Это была ваша проблема. Попробуйте! Он должен работать.