2012-05-16 4 views
2

Я не понимаю, почему, когда я звоню:Доступ к локальному доступу к хранилищу Windows Azure?

LocalResource ls = RoleEnvironment.GetLocalResource ("mystorage");

ls.RootPath;

Локальная папка не создана, я не понимаю, как она работает. Для меня это локальный путь, который создается. Поэтому я должен был.

C: \ Resources \ Каталог \ xxx.HelloAzureWeb.mystorage \

Но нет такого файла.

Редактировать: Что я пытаюсь сделать, это сохранить некоторые файлы сохранения сцены xml. В приложении Unity мне нужно опубликовать (сохранить их) и получить (использовать) эти файлы.

+0

Будут ли эти XML будут созданы/отредактированы/сохранены несколько раз, когда ваше приложение запущено? Или это произойдет только один раз до запуска приложения? – AvkashChauhan

+0

Эти XML будут редактироваться несколько раз во время работы, так как есть изменения на сценах, но только на важные. – MaT

+0

В важный момент. – MaT

ответ

2

Существует некоторое недоразумение о создании локального хранилища. При вызове ниже кода, он не создает локальное хранилище для вас, вместо этого он возвращается к вам экземпляр объекта Локального хранения, который создается во время установки приложения:

LocalResource ls = RoleEnvironment.GetLocalResource("mystorage"); 

Для определения локального хранения в вас приложении либо непосредственно добавить следующее в CSDEF (ниже настройки будут создавать локальное имя для хранения MyStorage, размер 2 Гб, и если какой-либо случае VM перезагружается или роль перезагружается, локальное хранилище не будет чистым и содержание все еще есть:

<LocalResources> 
<LocalStorage cleanOnRoleRecycle="false" name="mystorage" sizeInMB="2048" /> 
</LocalResources> 

Для добавьте локальное хранилище, которое вы также можете выбрать - >> [Visual studio> Свойства роли> Локальное хранилище> Добавить местное хранилище] также.

Когда вы определяете локальное хранилище в приложении Windows Azure, новая папка будет добавлена, как показано ниже на вашем диске C: на Azure VM, и это делается, когда ваша роль предоставляется в виртуальной машине во время запуска VM:

[In Azure VM] 
C:\Resources\directory\[Your_deploymentID].[your_webrolename]_[Role_Instance_Count]\ 

[In Compute Emulator] 
// Lunch your application in Compute Emulator and then open "Compute Emulator UI" to see the Local Storage Path in the command window related to your instance: 
C:\Users\avkashc\AppData\Local\dftmp\Resources\3503509c-2112-45ea-8d63-377fe9f78491\directory\mystorage\ 

После того, как вы добавите выше местного хранения специфических настроек в ServiceDefinition.CSDEF, ваше локальное хранилище будет создан, а затем следующий код будет работать:

LocalResource ls = RoleEnvironment.GetLocalResource("mystorage"); 
ls.Root // returns the correct local storage path 
// Now you can use ls to read/write your data. 
+0

Хорошо, вот что я подумал. Но я возвращаюсь к своему предыдущему вопросу. Как я могу отправить локальный xml-файл на свою страницу, а затем сохранить его в хранилище blob. Я полностью потерял память. Проблема в том, что мне нужно получить файл на моей веб-странице, и, как вы объяснили, нет способа получить его с примером. Но возможно ли с html submit, может быть, я смогу «подражать» этому поведению? – MaT

+0

Сделайте одно дело. Напишите свою цель, не используя какой-либо blob или локальное хранилище или что-нибудь еще. Просто в простом предложении, пожалуйста, предоставьте свою проблему, а затем я могу предложить, что было бы лучше всего из моего понимания. – AvkashChauhan

+0

Вопрос отредактирован. – MaT

0

При использовании эмулятора хранилища распределение локальных ресурсов - это всего лишь каталог файлов. Корневой путь немного отличается от того, что вы описываете, но вы должны иметь возможность перейти к этому каталогу на вашем локальном компьютере, который изначально будет пустым. You должен видеть его под вашим \ users \ you \ AppData (который является скрытым каталогом).

О, и местные ресурсы не имеют ничего общего с хранилищем Blob. В Windows Azure это всего лишь локально подключенный дисковый ресурс с определенной квотой размера. Это не долговечное хранилище, в отличие от хранилища Blob. Идеально подходит для записи временных файлов, кеширования и т. Д. И быстрее, чем Blob Storage, поскольку это локальный диск, но для чего-то, что необходимо сохранить, вы захотите рассмотреть Blobs.

+0

Спасибо за ваши замечания. Но путь, который вы описываете, - это когда вы проверяете свои вещи визуально. Когда вы публикуете свою работу, путь похож на ее описание. – MaT

+0

Извините - я неправильно понял, поскольку вопрос был немного трудным для чтения. Да, другая структура каталогов в Windows Azure, но фактически то же самое. После того, как вы получите корневое местоположение, вы можете свободно читать и писать в это место, вплоть до установленной вами квоты. –

1

Вот как вы получаете доступ к локальному хранилищу в своем ASP.NET Web Роль:

Шаг 1: Дата создания очень простой веб-ASP.NET Роль проекта

Шаг 2: Включено следующее servicedefinition.csdef:

<LocalResources> 
<LocalStorage name="mystorage" cleanOnRoleRecycle="false" sizeInMB="2096" /> 
</LocalResources> 

Шаг 3: Добавьте следующую код в любой ASPX (в данном случае about.aspx)

<div> 
    Local Storage file content: <b><asp:Label ID="fileContent" runat="server" /></b> 
</div> 

Шаг 4: Добавьте следующий код в любом aspx.cs (в данном случае about.aspx.cs):

protected void Page_Load(object sender, EventArgs e) 
{ 
     LocalResource myStorage = RoleEnvironment.GetLocalResource("mystorage"); 
     string filePath = Path.Combine(myStorage.RootPath, "Lesson.txt"); 
     File.WriteAllText(filePath, "First Lesson"); 
     fileContent.Text = File.ReadAllText(filePath); 

} 

Всё. Я тестировал этот код в эмуляторе вычислений и на облаке, и он действительно работает.

+0

Нет проблем с использованием и записью в локальном хранилище. Проблема в том, что у меня есть данные (xml-файл) на моем локальном компьютере, и я хочу сохранить их в облачном сервисе Windows. Вопросы состоят в том, как передать эти данные без каких-либо форм и т. Д. Я думал передать локальный путь моего файла на странице .net и сделать blob.createfile (путь), но нет ссылки, потому что он использует путь vm. – MaT

+0

Когда вы говорите, что хотите «хранить на облачном сервисе Windows», вы имеете в виду на Windows Azure VM или в Windows Azure Storage? ЕСЛИ вы хотите, чтобы ваш файл был частью Windows Azure VM, вам нужно добавить его в свое приложение Azure и установить «скопировать локально как истину». Если вы хотите перенести этот файл в хранилище Azure blob, вы можете использовать сторонние инструменты, например http://www.cloudberrylab.com/free-microsoft-azure-explorer.aspx или CloudXprorer. – AvkashChauhan

+0

Я нашел способ добиться своего цель больше не проблема. Я просто отправляю xml-данные в контроллер asp.net и сохраняю его в лазурной памяти как xml-blob. Спасибо за вашу помощь и ваше объяснение! – MaT

2

Для меня файлы, хранящиеся в блоках эмулятора хранилища, хранятся в C:\Users\[username]\AppData\Local\DevelopmentStorage\LDB\BlockBlobRoot. К сожалению, они не очень полезны. Это всего лишь куча GUID, но файлы выглядят правильно.

+0

Наконец, это сработало для меня! – Ryan

Смежные вопросы