Почему я по-прежнему получаю сообщение "Доступ к пути 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 значение "Идентификатор пула приложений". Без этого я все еще получал исключения в доступе при загрузке файлов.

У меня возникла та же проблема, проблема была в том, что я не снял флажок "Только чтение" в свойствах для данной папки.

Другие вопросы по тегам