Azure:辅助角色在c:\或本地存储上写入

时间:2012-07-31 12:36:20

标签: azure azure-worker-roles

我怀疑。

我有一个代码,用于创建文件“foo.txt”,然后使用UploadFile()将其复制到blob。
如果我不想要和天蓝色的概念我不能在“c:\”中创建这个文件?
我不得不在ServiceDefinition.csdef中使用本地存储,并在azureLocalResource.RootPath中创建它。

但是有一个用于写入的c:\驱动器(操作系统的d:\和代码的e:\),不是吗?
它有什么用? 我们可以在启动任务中使用它吗?

我问,因为我相信代码今天用c:\ util运行 而且我无法找到为什么类似的代码在新的工作者角色中不起作用 (这是文件和目录问题,而不仅仅是文件)

[答案]
我可以在c中创建此文件:但强烈建议使用本地存储API,因为驱动器号并不总是相同(例如重启后)。
本地存储只是使用当前实例的读取和写入驱动器的捷径 在启动任务的特定情况下,我们可以通过两种方式访问​​此存储:使用ac#program / script中的azure API(请参阅this topic)或使用环境变量(请参阅this topic)。

3 个答案:

答案 0 :(得分:8)

您不想将自己绑在固定的驱动器上。确实,C:\大多数情况下是数据磁盘,D:\大部分时间是OS和E:\是代码所在的大部分时间。

但你不能指望这一点,这就是我大部分时间都说的原因。就像Ryan解释here一样,重启后应用程序磁盘可能会从E:\更改为F:\,同样 适用于您的数据磁盘。只有 LocalResource 可以告诉您可以保存文件的位置,因此我建议您使用它。

如果您有需要处理文件的启动任务,您还应该使用LocalResources。这可以通过使用PowerShell:http://blog.smarx.com/posts/using-a-local-storage-resource-from-a-startup-task

来实现

答案 1 :(得分:2)

我建议您使用LocalStorage,它的目的是通过使用api,您可以检索路径/驱动器,而不是对特定驱动器位置具有硬编码依赖性。这也有助于避免任何权限问题,因为LocalStorage将在运行您的角色的进程的beck和调用。

答案 2 :(得分:0)

您是否可以将文件创建为文件流然后上传文件?还请考虑在多个实例上运行辅助角色的含义,因为对保存到C:\的文件的引用可能不存在,具体取决于角色所在的实例。 LocalResource最适合这个例子。

启动任务通常用于执行批处理文件,因此您可以运行使用cerebrata cmdlets上传文本文件的PowerShell脚本。