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

C# Windows Azure-Blob存储初始化-授权错误,c#,authentication,azure,azure-storage-blobs,C#,Authentication,Azure,Azure Storage Blobs,背景: 我有一个带有一个web角色的Azure应用程序,它是一个ASP.NET应用程序(C#),它使用图表应用程序来显示计算结果。图表应用程序需要一个XML文件作为输入。为了访问这个XML文件(在JavaScript中引用),我使用XDocument和相关类来操作文件,然后保存它,在页面刷新时加载图表控件 错误: 在尝试对容器对象进行操作(GetPermissions、Create、Create if not existence等)时,我遇到以下错误: 服务器验证请求失败。确保授权标头的值格式正

背景

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

错误

在尝试对容器对象进行操作(GetPermissions、Create、Create if not existence等)时,我遇到以下错误:

服务器验证请求失败。确保授权标头的值格式正确,包括签名。

我还尝试使用SpaceBlock提前创建容器,这似乎不必改变结果

代码

这是我在pageu加载时调用的函数。粗体(GetPermissions)行中出现错误:


在您提供的代码中,我看不到任何会导致您所说的问题的内容。在调用权限之前,您需要确保您已经执行了
CreateIfNotExist
,否则您将获得
指定容器不存在的错误(我猜您在遇到当前问题之前正在执行此操作)


由于代码看起来很好,这可能意味着是您的环境中的某些东西导致了您的悲伤,最有可能是连接字符串。我试图通过混淆连接字符串来复制您的问题,而获得完全相同错误的唯一方法是使用一个
AccountName
和另一个帐户的有效
AccountKey
。因此,我的建议是返回Azure门户,转到您的存储服务,并将主访问密钥复制到您的云配置中。

您是要针对开发人员存储还是实际的云帐户运行此操作?你检查过你的连接字符串了吗?我读过另一篇文章,推荐使用辅助键而不是主键。一旦我使用了主键,我就不再犯那个错误,继续犯另一个错误!谢谢。这个好像坏了。如果一个键工作,而另一个键不工作,那就是一个bug。如果是这样,那么再次尝试次键是值得的,只是为了确保复制/粘贴的内容没有错误。如果它仍然不工作,那么正如smarx指出的,这是一个bug,所以我会联系MS支持。但至少你现在可以继续发展小学。
    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;
        }
    }