2013-12-12 4 views
1

Я пытаюсь разработать многоуровневое облачное приложение с использованием Windows Azure. Чтобы сохранить свои данные, я выбрал Таблицы хранения Azure и Blores Azure Storage.Доступ к хранилищу Windows Azure с использованием библиотеки классов

Различные уровни моего приложения используют один и тот же набор функций, но по-разному. например все они должны иметь доступ к блобам. Я решил создать библиотеку отдельных классов для доступа к хранилищу Windows Azure Blob, но я столкнулся с ошибкой 400.

Когда я подключаюсь к Blobs непосредственно из моей рабочей роли, он работает нормально, но когда я вызываю класс из библиотеки классов, он не работает с 400 кодом состояния (Bad Request). Вот мой код:

public class TestClass 
{ 

    public static void Test() 
    { 
     string s = CloudConfigurationManager.GetSetting("StorageCS"); 
     CloudStorageAccount account = CloudStorageAccount.Parse 
      (
      s 
      ); 

     CloudBlobClient client = account.CreateCloudBlobClient(); 

     CloudBlobContainer container = 
          client.GetContainerReference("mycontainer"); 

     container.CreateIfNotExists(BlobContainerPublicAccessType.Blob); 

    } 

} 

Это тестовый класс, который просто пытается получить доступ блоб контейнер. Когда я использую этот класс внутри моей рабочей роли, он отлично работает. Если я ссылаюсь на эту рабочую роль из другой рабочей роли и использую этот класс во второй роли, она работает, но если я переведу этот класс во внешнюю библиотеку классов, это не сработает. Исключение выбрано в строке 'container.CreateIfNotExists (BlobContainerPublicAccessType.Blob);' Это StorageException, с «400». Плохой запрос ".

Я использую эмулятор Azure Storage Emulator. Используя отладчик, я проверил, что для метода CloudStorageAccount.Parse используется строка корневого соединения («UseDevelopmentStorage = true»), независимо от того, как используется класс (непосредственно, библиотека классов классов из другой рабочей роли). Кажется, что доступ к Azure Storage нельзя использовать с помощью библиотеки классов?

+0

Нет, вы можете получить доступ к Azure. Когда вы используете эмулятор, он использует хранилище для разработки, он локальный. У вас есть учетная запись на Azure? – Matt

ответ

5

Пожалуйста, проверьте версию библиотеки клиентов хранилища в своем проекте библиотеки классов. По всей вероятности, это версия 3.0.0.0. Если это так, то обратите внимание, что в настоящее время версия 3.0.0.0 клиентской библиотеки хранилища несовместима с эмулятором хранения (хранилище разработки). Это связано с тем, что библиотека использует новейшую версию REST API хранения, и эмулятор поддерживает только версию до этого. Проблема совместимости подсвечивается в команде хранения блоге здесь: http://blogs.msdn.com/b/windowsazurestorage/archive/2013/11/27/windows-azure-storage-release-introducing-cors-json-minute-metrics-and-more.aspx (Пожалуйста, прочитайте раздел «хранения Emulator Наведение» к концу поста)

Моя рекомендация будет понизить клиентскую библиотеку хранения к предыдущей версии (2.1.0.4). Вы можете установить эту версию через консоль диспетчера пакетов Nuget и ввести там следующую команду: Install-Package WindowsAzure.Storage -Version 2.1.0.4.

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