繁体   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