假设我的Azure角色在Windows临时文件夹中创建了大量临时文件并忘记删除它们。在某些时候它会收到“无法创建临时文件”错误。假设一旦发生这种情况,我的角色代码会抛出RoleEntryPoint.Run()
之外的异常并重新启动角色。
我不是在谈论完美的Azure感知代码。我的角色可能会使用第三方黑匣子代码,现在对Azure和“本地存储”一无所知,只会调用System.IO.Path.GetTempPath()
,从而在某些非Azure友好位置创建文件。
问题是,如果角色是在同一台主机上启动的,并且某些第三方没有清除临时文件夹,则该文件夹仍然没有文件,并且该角色将无法运行。根据{{3}},我的角色可能会保留本地更改,这在上述场景中是个大问题。
重新启动角色时,是否可以保证重置创建的临时文件等本地更改?如何确保启动角色处于合理清洁状态?
答案 0 :(得分:3)
该角色将从黄金映像(基本客户机操作系统vhd)中的新部署,升级和新扩展实例上重置。通常,对于重新启动和崩溃,您将获得相同的VHD和机器。
您编写的代码无权写入操作系统驱动器(D :) - 没有提升(或通过RDP登录执行此操作)。此外,用户的角色根驱动器(E :)上有一个配额,可以防止您意外地使用文件填充驱动器。这曾经是允许写的所有包装尺寸的10%。资源驱动器(C :)上也有一个配额,但这更加慷慨,取决于VM大小。
在非本地资源驱动器上不会清除任何内容,但如果您尝试超过配额,最终会出现错误。您可以关闭本地资源上的粘性存储,并在重新启动时清除它们。当然,与磁盘的其他更改一样,这些非本地资源临时文件在升级客户机操作系统(或基础根操作系统)时偶尔会丢失。如果您正在升级并且确实搞砸了您的安装(您可以这样做),您需要点击门户网站上的“Reimage”按钮,它将全部返回到黄金图像。