无法获取Azure App Service中托管的.NET网站的临时目录

时间:2017-02-21 22:14:44

标签: 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.__Error.WinIOError()
      at System.IO.Path.InternalGetTempFileName(Boolean checkHost)

堆栈跟踪在.NET方法中具有此功能,用于生成临时文件名。这种堆栈跟踪对于我们遇到故障的几乎所有区域都很常见。有点似乎,如果我们强迫网站重新启动和/或强制基础应用服务计划重新调整,它将消失,直到我们下次更新网站,但不再。

由于我们可以找到唯一的搜索结果,因此在启用模拟时会发生此错误,并且网站模拟的用户无权访问IIS App Pool用户的临时目录。首先,我们可以从日志记录中确认线程在发出失败请求时没有模拟。其次,为了好玩,我们将这个添加到web.config中,以确保双倍:

<system.web>        
    <identity impersonate="false"/>
</system.web>

一切都无济于事。如果这是Azure应用服务的一般问题,那么我认为它会破坏许多系统,因此我必须得出结论,我们做了一些令人着迷和错误的事情。

2 个答案:

答案 0 :(得分:0)

这可能不是您正在寻找的确切答案,但它可能有助于您指明正确的方向。

我使用Azure App Services时有类似的问题。我发现访问本地文件系统有点问题。有时它工作得很好,有时却没有。

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

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

要确定这是否是问题,您需要启用RDP以便直接登录。 https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-role-enable-remote-desktop

这是我能够最终解决问题的唯一方法。

答案 1 :(得分:0)

如果您打开App Service Web App的Kudu实例,您将能够看到下面的托管VM上的本地Temp目录。您可以访问&#34;高级工具&#34;访问Kudu。在Azure门户中的App Service刀片上,或导航到Web应用程序的 https:// {web app name} .scm.azurewebsites.net 域。

进入Kudu后,点击顶部导航栏中的环境。 Temp目录通常是 D:\ local \ Temp ,该路径存储在&#34; TEMP&#34;环境变量可供Web App访问。