ASP.NET Доступ к временному каталогу запрещен - PullRequest
13 голосов
/ 12 февраля 2009

Я испытываю эту проблему сегодня на многих разных серверах.

System.UnauthorizedAccessException: доступ к временному каталогу запрещен.

Серверы не были недавно затронуты. Единственное, что приходит мне в голову - это обновление Windows, что-то ломает .. Есть идеи?

Это происходит при попытке доступа к веб-сервису со страницы asp.net

System.UnauthorizedAccessException: Access to the temp directory is denied.  Identity 'NT AUTHORITY\NETWORK SERVICE' under which XmlSerializer is running does not have sufficient permission to access the temp directory.  CodeDom will use the user account the process is using to do the compilation, so if the user doesnt have access to system temp directory, you will not be able to compile.  Use Path.GetTempPath() API to find out the temp directory location.
       at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
       at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
       at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
       at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Evidence evidence)
       at System.Web.Services.Protocols.XmlReturn.GetInitializers(LogicalMethodInfo[] methodInfos)
       at System.Web.Services.Protocols.HttpServerType..ctor(Type type)
       at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
       at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
       at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

Ответы [ 7 ]

11 голосов
/ 12 февраля 2009

Вы проверили разрешения для временной папки? В этих случаях самым простым и быстрым решением, как правило, является повторный запуск команды aspnet_regiis -i для повторной установки инфраструктуры asp.net, которая также сбрасывает разрешения для необходимых папок. В противном случае попробуйте использовать Process Monitor , чтобы проверить, что происходит, и соответственно изменить разрешения.

9 голосов
/ 08 октября 2010

У меня была та же проблема, и ни одно из вышеперечисленных не решило нашу проблему - мы временно восстановили службу, изменив настройку, под которой работал каждый сайт пула приложений - вы можете сделать это, зайдя в пулы приложений -> вкладка idenity и и изменение пользователя с сетевой службы на локального пользователя - пока мы выяснили, в чем проблема (это не рекомендуется, поэтому, если вы решите это сделать, убедитесь, что понимаете последствия)

Затем мы нашли ссылку о сопоставлениях Temp \ TMP и о том, как их исправить - что не было нашей проблемой

На другом сайте (и, как описано в других ответах), мы использовали Path.GetTempPath(), чтобы увидеть, что на самом деле ищет CLR, оказалось

C: \ WINDOWS \ system32 \ Config \ systemprofile \ Local Настройки \ папка Temp

Затем мы использовали Process Monitor , чтобы убедиться, что это действительно правильно, когда мы изменили разрешение для этой папки, оно работало правильно. Мы по-прежнему не уверены, почему CLR решили прекратить использование временного каталога по умолчанию, но мы нашли ссылку на то, как он принимает это решение. Как выбирается GetTempPath .

Обновление: наконец-то мы выяснили, как изменилась переменная PATH для временной папки, когда кто-то решил повторить ошибку! Проблема заключалась в том, что CLR Profiler кто-то решил запустить вживую, что меняет все разрешения временного каталога, так что если вы еще этого не знали, я бы не рекомендуется запускать его на сервере Prod.

0 голосов
/ 11 марта 2016

Перейдите в папку roslyn (в папку bin вашего проекта) и добавьте права на чтение / запись у пользователя, который запускает пул приложений

0 голосов
/ 26 октября 2015

В моем случае антивирус (COMDO) был ответственен за это ... После обновления антивируса он только начал блокировать доступ к временной папке для моих локальных сервисов (не всех, только немногих) ... было довольно сложно понять это из ..

0 голосов
/ 11 марта 2013

Windows Server 2003 - IIS 6.0 - та же проблема. c: \ windows \ temp = текущий временный каталог - использование procmon по предложению cgreeno позволило мне увидеть, что доступ запрещен. Я предоставил пользователю «Все» полные права на папку c: \ windows \ temp, но доступ по-прежнему запрещен. Предоставил полные права доступа всем пользователям в миксе (локальная система, сетевая служба, удостоверение пользователя пула приложений и т. Д.), Но без помощи. Пробовал ASPNET_REGIIS -ir, но без помощи.

Я создал нового пользователя локальной системы 'tempuser' и назначен в локальную группу 'Администраторы'. Я перешел к службам Windows и остановил «Публикация в Интернете», «Администратор IIS» и «HTTP SSL». Я назначил «tempuser» для всех трех служб. Я попытался запустить каждую из служб, но они не смогли запуститься по разным причинам. Затем я вернул все 3 службы пользователю «Локальная система», и внезапно моя ошибка отказа в доступе исчезла. Не знаю почему. У меня были другие ошибки файловой системы с моим пользователем пула приложений, но теперь они тоже работают правильно. Похоже, что-то с назначением учетной записи локальной системы с помощью служб Windows было неправильно.

* ОБНОВЛЕНИЕ *

Проблема вернулась. Очень странно ...

0 голосов
/ 12 февраля 2009

Действительно, это веб-сайт, работающий в IIS? и доступ к веб-сервису.

Он либо работает как ASPNET, анонимен, либо выдает себя за подключенного пользователя, либо, наконец, сам веб-сервис подключается как «пользователь».

Какой бы пользователь ни был, он может не иметь доступа к временному каталогу. Странно, как ничего не изменилось :). Однако пакеты обновления Windows могут изменять параметры безопасности.

0 голосов
/ 12 февраля 2009

Какой бы ни была причина внезапного изменения, вы, вероятно, сможете решить проблему, используя шаги, описанные в исключении.

Вызовите Path.GetTempPath, чтобы узнать, что он думает о временном каталоге, он может быть не тем, что вы думаете.

Перейдите в этот каталог и предоставьте пользователю «NETWORK SERVICE» необходимые ему разрешения, вероятно, для чтения / записи.

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