我今天在许多不同的服务器上遇到了这个问题。
System.UnauthorizedAccessException:拒绝访问临时目录。
最近没有触及服务器。我脑子里唯一想到的是Windows更新破坏了什么......有什么想法吗?
尝试从asp.net页面访问Web服务时会发生这种情况
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)
答案 0 :(得分:11)
您是否检查了临时文件夹的权限?在这些情况下,最简单,最快捷的解决方案通常是重新运行 aspnet_regiis -i 命令来重新安装asp.net框架,该框架还会重置所需文件夹的权限。如果做不到这一点,请尝试使用Process Monitor检查发生的情况并相应地修改权限。
答案 1 :(得分:9)
我遇到了同样的问题,以上都没有解决我们的问题 - 我们通过更改每个应用程序池网站运行的设置暂时恢复服务 - 您可以通过进入应用程序池来执行此操作 - >识别选项卡以及将用户从网络服务更改为本地用户 - 同时我们发现了问题所在(不推荐这样做 - 所以如果您选择这样做,请确保您了解其中的影响)
然后我们找到了关于Temp \ TMP映射的link以及如何修复它们 - 这不是我们的问题
在另一个site上(和其他答案中所述)我们使用Path.GetTempPath()
来查看CLR实际上正在寻找的内容
C:\ Windows \ system32 \设置\ systemprofile \本地 Settings \ Temp文件夹
然后我们使用Process Monitor来验证这实际上是正确的,当我们更改了此文件夹的权限时,它正常工作。我们仍然不确定为什么CLR选择停止使用默认的临时目录,但我们确实找到了一个关于它如何做出决定的链接。 How GetTempPath is picked
更新:我们终于弄清楚当有人决定重复错误时我们的Temp文件夹PATH如何被更改!问题是CLR Profiler 某人决定在live上运行,这会更改临时目录的所有权限,所以如果你还不知道这个,我不建议在Prod服务器上运行它。
答案 2 :(得分:0)
无论突然改变的原因是什么,您都可以使用异常中描述的步骤来解决问题。
调用Path.GetTempPath找出它认为临时目录的内容,它可能不是你想象的那样。
转到该目录并为用户“NETWORK SERVICE”提供所需的权限,可能是“读/写”。
答案 3 :(得分:0)
确实是一个在IIS中运行的网站?并访问网络服务。
它既可以作为ASPNET运行,也可以匿名运行,或者模拟连接的用户,或者最终Web服务本身作为“用户”进行连接。
无论用户是谁,都可能无法访问临时目录。奇怪的是没有任何改变:)。但是,Windows Service Pack可以更改安全设置。
答案 4 :(得分:0)
Windows Server 2003 - IIS 6.0 - 同样的问题。 c:\ windows \ temp =当前临时目录 - 使用cgreeno建议的procmon允许我看到访问被拒绝。我授予用户'Everyone'对c:\ windows \ temp文件夹的完全权限,但仍然拒绝访问。授予混合中所有用户的完全权限访问权限(本地系统,网络服务,应用程序池标识用户等),但没有帮助。试过ASPNET_REGIIS -ir但没有帮助。
我创建了一个新的本地系统用户'tempuser'并分配给本地'Administrators'组。我导航到Windows服务并停止了“万维网发布”,“IIS管理”和“HTTP SSL”。我为所有三项服务分配了'tempuser'。我尝试启动每项服务,但由于各种原因它们无法启动。然后我将所有3个服务都放回用户的“本地系统”,突然我的访问被拒绝错误就消失了。不知道为什么。我的App Pool用户遇到了其他文件系统错误,但现在这些错误也正常。看来,使用Windows服务分配本地系统帐户是错误的。
*更新*
问题回来了。非常奇怪......
答案 5 :(得分:0)
在我的情况下,防病毒软件(COMDO)对此负责......防病毒更新后,它开始阻止访问我的本地服务的临时文件夹(不是全部,只有少数)...这有点难以理解出.. ..
答案 6 :(得分:0)
转到roslyn文件夹(进入项目的bin foloder)并在运行应用程序池的用户处添加读/写权限