2012-07-31 50 views
2

我在怀疑。Azure:工人角色写在c:或本地存储

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

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

我问,因为我相信代码今天用c:\ util运行。
而我找不到为什么类似的代码不适用于新的工作角色。
(这是一个文件和目录的问题,而不仅仅是文件)

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

+2

有没有必要添加您的问题的答案。您已经标记了@ Sandrino的答案,人们可​​以轻松找到并点赞。 – 2012-08-01 10:24:05

回答

8

您不想将自己绑定到固定的driveletters。确实,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

+0

好的,我读了一本书,说这个名字被定义了......谢谢你的回答,我确信本地存储和c:\是完全不同的,但没有。 – Benjamin 2012-07-31 13:03:53

2

我会建议你使用本地存储,其用于该目的并通过使用API​​,您可以检索路径/驱动器,而不必在一个特定的驱动器位置的硬编码的依赖。这也有助于避免任何权限问题,因为LocalStorage将处于运行角色的流程的召唤和召唤之中。

+0

事实上,我发现重启后,Sandrino Di Mattia说道,路径可能会有所不同,并且我可能会遇到一些棘手的异常... – Benjamin 2012-07-31 13:05:21

0

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

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

+0

我无法将文件创建为文件流,因为我在库中使用它(这是一个sqlite文件)。我不需要使用您的工具来上传我的上传文件,因为它是在Run()方法中创建的,所以在启动任务之后。 – Benjamin 2012-08-01 07:23:10

相关问题