2012-07-31 31 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

相關問題