Доступ к локальному хранилищу BLOB-объектов Windows Azure?

Я не понимаю, почему, когда я звоню:

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

ls.RootPath;

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

C:\Resources\directory\xxx.HelloAzureWeb.mystorage\

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

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


person MaT    schedule 16.05.2012    source источник
comment
Будут ли эти XML создаваться/редактироваться/сохраняться несколько раз во время работы вашего приложения? Или это произойдет только один раз перед запуском приложения?   -  person AvkashChauhan    schedule 16.05.2012
comment
Эти XML будут редактироваться несколько раз во время выполнения, так как есть изменения в сценах, но только в важных.   -  person MaT    schedule 16.05.2012
comment
Для этой цели лучше всего подходит локальное хранилище, которое также может обеспечить высокую производительность, но имейте в виду, что это хранилище не сохраняется, поэтому, если виртуальная машина выйдет из строя и произойдет повторное создание образа, вы потеряете эти данные, если вы не сделаете резервную копию в хранилище Azure. а затем вернуть, когда виртуальная машина перезапустится.   -  person AvkashChauhan    schedule 16.05.2012
comment
К вашему сведению, я добавил еще один ответ, чтобы показать, как вы можете создавать файлы, записывать в них, а затем получать к ним доступ в любой веб-роли ASP.NET.   -  person AvkashChauhan    schedule 16.05.2012


Ответы (4)


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

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

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

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

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

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

[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\

Once you will add above local storage specific settings in ServiceDefinition.CSDEF, your local storage will be created and then the following code will work:

LocalResource ls = RoleEnvironment.GetLocalResource("mystorage");
ls.Root // returns the correct local storage path
// Now you can use ls to read/write your data.
person AvkashChauhan    schedule 16.05.2012
comment
Хорошо, я так и думал. Но я возвращаюсь к моему предыдущему вопросу. Как я могу отправить локальный XML-файл на свою страницу, а затем сохранить его в хранилище BLOB-объектов. Я полностью потерялся в отношении хранения больших двоичных объектов. Проблема в том, что мне нужно получить файл на моей веб-странице, и, как вы объяснили, нет способа получить его, например, с путем. Но это возможно с отправкой html, может быть, я могу подражать этому поведению? - person MaT; 16.05.2012
comment
Сделайте одну вещь, пожалуйста. Напишите свою цель, не используя никаких больших двоичных объектов, локальное хранилище или что-то еще. Просто в простом предложении, пожалуйста, укажите свою проблему, и тогда я могу предложить, что было бы лучше всего, насколько я понимаю. - person AvkashChauhan; 16.05.2012

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

person jocull    schedule 25.10.2012

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

Шаг 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);

}

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

person AvkashChauhan    schedule 16.05.2012
comment
Нет проблем с использованием и записью в локальное хранилище. Проблема в том, что у меня есть данные (файл xml) на моем локальном компьютере, и я хочу сохранить их в облачной службе Windows. Вопросы в том, как передать эти данные без каких-либо форм или чего-то еще. Я думал передать локальный путь к моему файлу на странице .net и выполнить blob.createfile(path), но ссылки нет, потому что он использует путь vm. - person MaT; 17.05.2012
comment
Когда вы говорите, что хотите хранить данные в облачной службе Windows, вы имеете в виду виртуальную машину Windows Azure или хранилище Windows Azure? ЕСЛИ вы хотите, чтобы ваш файл был частью виртуальной машины Windows Azure, вам нужно добавить его в свое приложение Azure и установить локальное копирование как true. ЕСЛИ вы хотите перенести этот файл в хранилище BLOB-объектов Azure, вы можете использовать сторонние инструменты, например cloudberrylab.com/free-microsoft-azure-explorer.aspx или CloudXprorer.. - person AvkashChauhan; 17.05.2012
comment
Я нашел способ достичь своей цели, больше нет проблем. Я просто отправляю данные xml на контроллер asp.net и сохраняю их в хранилище Azure в виде большого двоичного объекта xml. Спасибо за вашу помощь и ваше объяснение! - person MaT; 23.05.2012

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

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

person David Makogon    schedule 16.05.2012
comment
Спасибо за точность. Но путь, который вы описываете, — это когда вы тестируете свои вещи с помощью визуала. Когда вы публикуете свою работу, путь как бы описан. - person MaT; 16.05.2012
comment
Извините - я неправильно понял, так как вопрос был немного сложным для чтения. Да, другая структура каталогов в Windows Azure, но по сути то же самое. Как только вы получите корневую папку, вы сможете читать и писать в нее в пределах установленной вами квоты. - person David Makogon; 16.05.2012