Я использую 64-битный компьютер. Мой пул приложений настроен на использование NETWORK SERVICE. Мое приложение работает нормально, когда оно работает в 64-битном режиме.
При работе в 32-битном режиме (установите флажок Enable32BitAppOnWin64 в пуле приложений), я часто получаю ошибки разрешения, когда IIS не может получить доступ к своей временной папке. Если я изменю tempDirectory в web.config, проблема будет решена временно. Это часто возвращается позже, после того, как я внес еще одно изменение в свое приложение.
Пример, когда tempDirectory = "c: \ temp \ iistemp4"
Доступ к пути 'c: \ temp \ iistemp4 \ tbmpos \ a93ceaf9 \ c953db72 \ ResX \ header.ascx.resources' запрещен. ---> System.UnauthorizedAccessException: доступ к пути 'c: \ temp \ iistemp4 \ tbmpos \ a93ceaf9 \ c953db72 \ ResX \ header.ascx.resources' запрещен.
Очевидно, что NETWORK SERVICE имеет доступ к папке, поскольку она фактически создала ее. Возврат в 64-битный режим решает проблему.
Process Monitor показывает:
12: 40: 47.7314293 PM w3wp.exe 6184 CreateFile c: \ temp \ iistemp4 \ tbmpos \ a93ceaf9 \ c953db72 \ ResX \ header.ascx.resources ACCESS DENIED Требуемый доступ: универсальная запись, чтение атрибутов, расположение: OpenIf, параметры: синхронный I Non-Alert, файл без каталога, открытый без повторного вызова, атрибуты: н / д, ShareMode: нет, AllocationSize: 0
Это единственный доступ к нему, который я вижу в Process Monitor.
Однако, если я открою папку с помощью проводника Windows, я получу несколько «ПЕРЕКЛЮЧЕНИЕ БУФЕРА» в разделе «Информация о владельце, DACL и о владельце, группе, DACL». IIS создал файл с неправильными разрешениями?
Есть идеи?