Windows Azure - Blob存储初始化 - 授权错误

时间:2010-11-09 19:58:41

标签: c# authentication azure azure-storage-blobs

背景

我有一个Azure应用程序,其中一个Web角色是一个ASP.NET应用程序(C#),它使用图表应用程序显示计算结果。图表应用程序需要XML文件作为输入。为了访问这个XML文件(在JavaScript中引用),我使用XDocument和相关的类来操作文件,然后保存它,在页面刷新时加载图表控件。

错误

容器对象上尝试操作(GetPermissions,创建,如果不存在等等)时,出现以下错误:

服务器无法验证请求。确保正确形成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;
        }
    }

1 个答案:

答案 0 :(得分:1)

我无法在您提供的代码中看到任何可能导致您正在谈论的问题的内容。在调用权限之前,您需要确保已经完成CreateIfNotExist,否则会出现The specified container does not exist错误(这是我猜你在遇到当前问题之前所做的事情)

由于代码似乎很好,这可能意味着你环境中的某些东西会让你感到悲伤,很可能就是连接字符串。我已经尝试通过弄乱连接字符串来复制您的问题,我唯一能够得到完全相同的错误的方法是使用来自其他帐户的有效AccountName的{​​{1}} 。所以我的建议是返回Azure门户,转到存储服务并将主访问密钥复制到您的云配置中。