Почему я по-прежнему получаю сообщение «Доступ к пути C: \ ... \ ... 'запрещен» даже после предоставления разрешения IIS_IUSRS на запись в каталог? - PullRequest
6 голосов
/ 13 марта 2011

Я написал метод на моем контроллере, который автоматически генерирует колоду 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 ]

18 голосов
/ 14 марта 2011

Я нашел решение - я использую IIS 7, и у меня был неправильный идентификатор пула приложений.В IIS 7 я просто изменил удостоверение пула приложений, на котором запущено мое приложение, и бум, все работало.Я использовал NETWORK SERVICE в качестве своей личности.

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

3 голосов
/ 23 марта 2016

Я столкнулся с этой проблемой, но на самом деле это было связано с тем, что файлы были помечены как «Только для чтения» в NTFS FS.

В моем случае это был new FileStream(path, FileMode.Open), который не удался, и его легко исправить, заменив его на File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read).

Нижняя строка, даже если файл доступен для чтения, просто указание FileMode.Open кажется по умолчанию в FileAccess.ReadWrite.

3 голосов
/ 21 января 2013

Идентификатор пула приложений должен быть установлен на «Сетевая служба» (в качестве примера действительного пользователя, которого вы можете использовать для запуска службы).Но вы также должны установить в IIS Admin Authentication \ Anonymous Authentication Enabled и Anonymous User Identity значение «Идентификатор пула приложений».Без этого я все еще получал исключения при доступе к файлу.

0 голосов
/ 20 апреля 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...