Asp.net 无法获取Azure应用程序服务中托管的.NET网站的临时目录

Asp.net 无法获取Azure应用程序服务中托管的.NET网站的临时目录,asp.net,azure,Asp.net,Azure,我们正在验证我们的Loupe服务是否作为Azure应用程序服务运行,并且遇到了一个我们无法确定的showstopper。尝试解析临时目录的任何操作都会失败,出现以下异常: mscorlib : System.IO.IOException The directory name is invalid. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.

我们正在验证我们的Loupe服务是否作为Azure应用程序服务运行,并且遇到了一个我们无法确定的showstopper。尝试解析临时目录的任何操作都会失败,出现以下异常:

mscorlib : System.IO.IOException The directory name is invalid. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.__Error.WinIOError() at System.IO.Path.InternalGetTempFileName(Boolean checkHost) mscorlib:System.IO.IOException 目录名无效。 在System.IO.\uuu Error.WinIOError(Int32 errorCode,字符串maybeFullPath) 在System.IO.\uuu Error.WinIOError()中 位于System.IO.Path.InternalGetTempFileName(布尔checkHost) 堆栈跟踪在生成临时文件名的.NET方法中具有此功能。这个堆栈跟踪在我们遇到故障的几乎所有区域都很常见。有一段时间,如果我们强迫站点重新启动和/或强迫底层应用程序服务计划重新缩放,它将消失,直到我们下一次更新站点,但不再出现

由于我们能找到的唯一搜索结果表明,当启用模拟且站点模拟的用户无法访问IIS应用程序池用户的临时目录时,就会发生此错误,我们对此进行了深入研究。首先,我们可以从日志中确认线程在发出失败请求时没有模拟。其次,为了好玩,我们在web.config中添加了以下内容:



都没有用。如果这是Azure应用程序服务的一个一般性问题,那么我认为它会破坏许多系统,因此我必须得出结论,我们做了一些有趣的错误的事情来导致它。

这可能不是您想要的确切答案,但它可能会帮助您找到正确的方向

我在使用Azure应用程序服务时也遇到过类似的问题。我发现访问本地文件系统有些问题。有时它工作得很好,有时却不行

最终,我发现当Azure应用程序服务被实例化时,它并不总是为其背后的系统使用相同的驱动器号。在某些情况下,这可能会导致环境变量明显不正确。他们“认为”他们设置正确,但情况并非总是如此

生成临时文件名将使用该环境变量作为路径,如果将其设置为C:但机器有一个D:驱动器,则if将失败。驱动器不存在,因此临时文件的路径也不存在

要确定这是否是问题所在,您需要启用RDP,以便直接登录


这是我最终能够找到答案的唯一方法。

如果打开应用程序服务Web应用程序的Kudu实例,您将能够看到下面托管VM上的本地临时目录。您可以访问Kudu,方法是转到Azure门户中应用程序服务刀片上的“高级工具”,或导航到web应用程序的https://{web App name}.scm.azurewebsites.net域


进入Kudu后,单击顶部导航中的环境。临时目录通常为D:\local\Temp,该路径存储在“Temp”环境变量中,可供您的Web应用程序访问。

您是否一直都遇到此错误,或者它有时工作正常?此时,我们无法让它再工作,每次调用任何需要临时目录的内容时。以前,一个进程一旦表现出这种行为,就不会再出现,但偶尔重新启动会使它工作(在进程的生命周期内)。哦,这是我的错。当我遇到这个问题时,我使用了一个工人角色。我不记得应用服务在当时是否是一个独立的东西&我假设它们是一样的。我只是指了指我遇到的类似的东西,可能会朝着正确的方向发展。谢谢你的更正!右-web/worker角色实例将更改驱动器号。Web应用程序将只使用
d:\home\…
。事实上,正如预期的那样,存在一个临时目录-问题是,我的应用程序试图解决临时目录的调用无法做到这一点(或者无法访问该目录)。