簡體   English   中英

Windows Azure - Blob存儲初始化 - 授權錯誤

[英]Windows Azure - Blob storage initialization - Authorization Error

背景

我有一個Azure應用程序,其中一個Web角色是一個ASP.NET應用程序(C#),它使用圖表應用程序來顯示計算結果。 圖表應用程序需要XML文件作為輸入。 為了訪問這個XML文件(在JavaScript中引用),我使用XDocument和相關類來操作文件,然后保存它,在頁面刷新時加載圖表控件。

錯誤

當試圖在容器對象上操作(GetPermissions,Create,Create if not exists等)時,我收到以下錯誤:

服務器無法驗證請求。 確保正確形成Authorization標頭的值,包括簽名。

我也嘗試使用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;
        }
    }

我在您提供的代碼中看不到會引起您所討論問題的任何內容。 您需要確保在調用權限之前已經完成了CreateIfNotExist ,否則您將得到一個The specified container does not exist錯誤(這是我猜你在遇到當前問題之前所做的)。

由於代碼似乎很好,這可能意味着你的環境中的某些東西會讓你感到悲傷,很可能就是連接字符串。 我已經嘗試通過弄亂連接字符串來復制您的問題,我唯一能夠得到完全相同的錯誤的方法是使用具有來自不同帳戶的有效AccountKeyAccountName 所以我的建議是返回Azure門戶,轉到存儲服務並將主訪問密鑰復制到您的雲配置中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM