Почему я по-прежнему получаю сообщение "Доступ к пути C:\...\...'запрещен" даже после предоставления разрешения IIS_IUSRS на запись в каталог?
Я написал метод на моем контроллере, который автоматически генерирует колоду powerpoint для моего клиента, и все это прекрасно работает... за исключением того, что я застрял в части сохранения файла на диск.
Я не чужд этой концепции; и "подумал", что все, что мне нужно сделать, это предоставить IIS_IUSRS разрешение на запись в каталог и разрешение на чтение во всех родительских каталогах. Я использую IIS 7, и я делал это раньше с IIS 6, предоставляя NETWORK SERVICE те же разрешения.
Просто для удовольствия я даже дал ВСЕМ разрешения на запись в каталог, и я все еще продолжаю получать Исключение: System.UnauthorizedAccessException: Доступ к пути 'C:......\Content\PPT' запрещен. (Я удалил некоторые пути для простоты).
Есть что-нибудь еще, что я пропускаю? Сервер, на котором он установлен, является первым, который я настроил, так что я просто что-то пропустил?
Вот мой упрощенный метод контроллера:
public ActionResult CreatePowerPoint()
{
string path = HttpContext.Server.MapPath("~/Content/PPT");
Aspose.Slides.Presentation presentation = new Aspose.Slides.Presentation();
CreatePresentation(presentation);
presentation.Save(path, Aspose.Slides.Export.SaveFormat.Ppt);
return View();
}
}
метод presentation.Save() принимает путь и формат сохранения... Я не знаю, что еще можно попробовать... Что-то не так с моим кодом? Я неправильно создаю путь? Я также могу передать поток Stream в метод save, но я не уверен, что это решит проблему.
4 ответа
Я нашел решение - я использую IIS 7, и у меня был неправильный идентификатор пула приложений. В IIS 7 я просто изменил удостоверение пула приложений, на котором запущено мое приложение, и бум, все работало. Я использовал NETWORK SERVICE в качестве своей личности.
Также для тех, кто использует Aspose Slides, я также должен был убедиться, что имя файла было в пути.
Я столкнулся с этой проблемой, но это было на самом деле, потому что файлы были помечены как только для чтения в NTFS FS.
В моем случае это был new FileStream(path, FileMode.Open)
что не удалось, и было легко исправить, заменив его File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)
,
Итог, даже если файл читабелен, просто указав FileMode.Open
кажется, по умолчанию в FileAccess.ReadWrite
,
Идентификатор пула приложений должен быть установлен на "Сетевая служба" (в качестве примера действительного пользователя, которого вы можете использовать для запуска службы). Но вы также должны установить в IIS Admin Authentication\Anonymous Authentication Enabled и Anonymous User Identity значение "Идентификатор пула приложений". Без этого я все еще получал исключения в доступе при загрузке файлов.
У меня возникла та же проблема, проблема была в том, что я не снял флажок "Только чтение" в свойствах для данной папки.