Windows Azure - Инициализация хранилища BLOB-объектов - Ошибка авторизации

Фон:

У меня есть приложение Azure с одной веб-ролью, которая представляет собой приложение ASP.NET (C #), которое использует приложение для построения диаграмм для отображения результатов вычислений. Приложению для построения графиков требуется XML-файл в качестве входных данных. Чтобы получить доступ к этому XML-файлу (указанному в JavaScript), я использую XDocument и связанные классы для управления файлом, затем сохраняю его, управление диаграммой загружается при обновлении страницы.

Ошибка:

При попытке работать (GetPermissions, Create, Create if not exists и т. Д.) С объектом контейнера я получаю следующую ошибку:

Серверу не удалось подтвердить запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.

Я также пробовал заранее создать контейнер с помощью SpaceBlock, похоже, это не повлияло на результат.

Код:

Вот функция, которую я вызываю для Page_Load. Ошибка отображается в строке, выделенной жирным шрифтом (GetPermissions):

    private void InitializeStorage()
    {
        if (storageInitialized)
        {
            return;
        }

        lock (gate)
        {
            if (storageInitialized)
            {
                return;
            }

            try
            {
                CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
                {
                    configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
                });

                // read account configuration settings
                var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

                // create blob container for images
                blobStorage = storageAccount.CreateCloudBlobClient();
                CloudBlobContainer container = blobStorage.GetContainerReference("xml");

                // configure container for public access
                **var permissions = container.GetPermissions();**
                permissions.PublicAccess = BlobContainerPublicAccessType.Container;
                container.SetPermissions(permissions);

                CloudBlob opcBlob = container.GetBlobReference("OptionPriceChart.xml");
                opcBlob.DownloadToFile("opcLocal.xml");

            }
            catch (WebException)
            {
                throw new WebException("Storage services initialization failure. "
                    + "Check your storage account configuration settings. If running locally, "
                    + "ensure that the Development Storage service is running.");
            }

            storageInitialized = true;
        }
    }

person user502339    schedule 09.11.2010    source источник
comment
Вы пытаетесь запустить это против хранилища разработчиков или реальной облачной учетной записи? Вы проверили строку подключения?   -  person knightpfhor    schedule 09.11.2010


Ответы (1)


Я не вижу в вашем коде ничего, что могло бы вызвать проблему, о которой вы говорите. Вам нужно будет убедиться, что вы выполнили CreateIfNotExist перед вызовом разрешений, иначе вы получите The specified container does not exist ошибку (это то, что, как я предполагаю, вы делали до того, как столкнулись с текущей проблемой).

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

person knightpfhor    schedule 09.11.2010
comment
Я прочитал другой пост, в котором рекомендовалось использовать вторичный ключ вместо первичного. Как только я использовал первичный ключ, я перешел к другой ошибке! Спасибо. - person user502339; 10.11.2010
comment
Кажется, это сломано. Если один ключ работает, а другой нет, это ошибка. - person user94559; 10.11.2010
comment
Если бы это было так, стоило бы попробовать вторичный ключ еще раз, просто чтобы убедиться, что это не ошибка того, что вы копируете / вставляете. Если это все еще не работает, то, как указал smarx, это ошибка, поэтому вам следует обратиться в службу поддержки MS. Но, по крайней мере, вы пока можете продолжать разработку с первичным узлом. - person knightpfhor; 10.11.2010