【问题标题】:azure blob storage "No valid combination of account information found"azure blob 存储“找不到有效的帐户信息组合”
【发布时间】:2012-12-04 12:21:52
【问题描述】:

我有一个使用 Azure 网站预览运行的 MVC4 项目。

我的问题是,当我将网站部署到 azure 时,我无法将 blob 上传到我的 blob 存储容器中,但是当我在本地调试时上传工作正常。

这是我在部署时得到的异常和堆栈跟踪,我尝试上传到容器:

找不到有效的帐户信息组合。在 Microsoft.WindowsAzure.Storage.CloudStorageAccount.b__0(字符串错误)在 Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(字符串 s, CloudStorageAccount& accountInformation,Action`1 错误)在 Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(字符串 连接字符串)在 MyProj.Controllers.ImageController.Upload(ImageViewModel 模型)

特别是根据堆栈跟踪,它是失败的 .Parse 方法。

我用来连接到 blob 存储的代码直接来自 azure how-to 文档:

string connectionString = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

再次,当我在我的开发盒上本地运行时,这工作正常,我可以毫无问题地成功上传。然而,它在部署时给了我这个错误,我尝试做同样的事情。

我猜我的 storageConnectionString 在网络部署发布过程中被弄乱了,但我不确定如何解决这个问题?

【问题讨论】:

  • 将您的存储连接字符串存储在 AppSettings 中,而不是 ConnectionStrings 部分。而且,在此处粘贴实际的连接字符串将有助于我们为您提供帮助(您可以将 *** 用作帐户密钥)。
  • 好的,我已经将连接字符串移到 AppSettings 中,现在可以正常工作了。奇怪!感谢您的帮助:)
  • 那么,@astaykov - 转发作为答案怎么样,所以 oTomo 可以这样标记... :)
  • 这修复了错误有点奇怪。最后CloudStorageAccount.Parse 是用相同的连接字符串调用的,所以它应该可以正常工作......

标签: c# azure connection-string azure-blob-storage


【解决方案1】:

确保

1) 您正在使用正确的诊断协议(双击角色 -> 配置选项卡 -> 选择配置 -> 在“诊断”下,单击省略号 -> 尝试单击确定...如果它给出错误您必须使用 https,将连接字符串更改为 https)

2) 不允许有空格...即 UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1 代替 UseDevelopmentStorage=true; DevelopmentStorageProxyUri=https://127.0.0.1

(注意分号后的空格)

在“设置”选项卡上检查所有连接字符串中的 https 和空格

---编辑----

添加“https”实际上让我们搞砸了一切。 Worker 角色会抛出异常(“Handshack 由于意外的数据包格式而失败。”),然后在未知和销毁之间循环。删除了“https”中的“s”,并确保没有空格,瞧。

【讨论】:

  • 注意:这只发生在使用 Compute Emulator 2.0 或更高版本的开发人员身上。
  • 我在 "= true" 之间有空格 - 我认为 VS 在我复制和粘贴时引入了它们,然后再包含语音标记,我没有注意到!
  • 删除空格对我有用。谢谢!好教程:codeproject.com/Articles/490178/…
  • 我不知道空格会是个问题!!删除空格已经解决了这个问题。谢谢!
  • 为我工作。修剪连接字符串
【解决方案2】:

获取 CloadStorageAccount 实例的另一种方法是这样做

StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

这应该可以帮助遇到此解析问题的任何人。

【讨论】:

  • StorageCredentials 类现在是抽象类,请改用 StorageCredentialsAccountAndKey 类
【解决方案3】:

将您的存储连接字符串存储在 AppSettings 中,而不是 ConnectionStrings 部分。而且,在此处粘贴实际的连接字符串将帮助我们帮助您(您可以将 * 用于帐户密钥)。

【讨论】:

  • 我试过了,但仍然收到“找不到有效的帐户信息组合”错误。我的连接字符串键/值是 key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***;BlobEndpoint=customEndpoint"。 var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
  • 为什么会有任何不同?最后它只是一个字符串,ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString 对我来说工作得很好......不用说,将它保存为连接字符串更有意义。
  • 是的,哦,可能。但不是在 2012 年,当配置管理器的连接字符串提供者不知道 Azure 存储连接字符串时,当问题发布回答时......
  • 还要检查开始和结束引号。
【解决方案4】:

我认为,这不是 Sandino Di Mattia 所表达的问题的原因。我在将 SDK 升级到 2.0 时也遇到了同样的问题,结果发现 API 的连接字符串解析器不再允许连接字符串中出现空格,并且在任何地方都没有提到它。如果这种改变是故意的,我会称之为讨厌的举动......

【讨论】:

  • 不幸的是,我在尝试连接到 azure 队列时遇到了同样的问题。该字符串在应用程序设置中,并且在字符串中找不到空格:(
【解决方案5】:

我收到此错误是因为错过了 Blob SAS URL 之前的前缀 BlobEndpoint=

错误的appsettings.json

{
  "TestBlobWriter": {
    "ConnectionString": "https://test.blob.core.windows.net/test-container?sp=*&st=*&se=*&spr=*&sv=*&sr=*&sig=*",
    "ContainerName": "test-container"
  }
}

正确的appsettings.json

{
  "TestBlobWriter": {
    "ConnectionString": "BlobEndpoint=https://test.blob.core.windows.net/test-container?sp=*&st=*&se=*&spr=*&sv=*&sr=*&sig=*",
    "ContainerName": "test-container"
  }
}

【讨论】:

    【解决方案6】:

    请注意,连接字符串中的大小写也很重要。在大型合并导致某人在我的 Web.config 中将“AccountName”更改为“Accountname”之前,我遇到了此错误。使用正确的大小写修复了错误。

    【讨论】:

      【解决方案7】:

      如果您非常确定,从 Azure 服务复制的连接字符串与您粘贴的相同,请检查您是否给了任何回车/空格以方便阅读,这也是导致该问题的原因之一你所经历的。 我试图为 @scottndecker 提供 +1,但因为我没有 15 声望,所以不能。

      【讨论】:

        【解决方案8】:

        使用 proxyUri 时不要忘记包含“https://”或“https://”。 喜欢:

        UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1

        【讨论】:

          【解决方案9】:

          我得到这个是因为我不小心在字符串的末尾添加了一个换行符 (\r\n)。

          【讨论】:

            【解决方案10】:

            我遇到了同样的问题。您需要使用Microsoft.WindowsAzure.Storage 命名空间并确保连接字符串中没有多余的空间。

            【讨论】:

              【解决方案11】:

              我收到此错误是因为我使用了错误的 nuget 包, (我使用的是点网 4.6.1)

              错误的包是: WindowsAzureStorage.Helper

              正确的包是: WindowsAzure.Storage

              并确保您使用命名空间: 使用 Microsoft.WindowsAzure.Storage;

              【讨论】:

              • 我认为提问者没有从那个错字中得到错误。
              【解决方案12】:

              当我使用 @Microsoft.KeyVault(SecretUri=https...) 将存储连接字符串从应用设置字面量迁移到 keyvault 引用时遇到此错误 我创建了一个新的函数应用程序,却忘记打开系统分配的身份并授予该应用程序对 keyvault 的访问权限。因此,症状是未定义的应用设置值 - 存储连接尝试失败。

              【讨论】:

                【解决方案13】:

                我将分享我的问题的解决方案。我在想括号必须保留并在其中输入信息。去掉括号后,我的问题就解决了。

                发件人:

                string eventHubName = "{Event Hub name}";
                

                收件人:

                string eventHubName = "Event Hub name";
                

                同样适用于:eventHubConnectionString、storageAccountName 和 storageAccountKey

                【讨论】:

                • 谢谢@SurajRao 的评论,现在好些了吗?
                【解决方案14】:

                要在 azure 上解决此问题,请不要使用默认字符串,而是使用简约版本,例如:

                <add name="StorageConnection" 
                    connectionString="DefaultEndpointsProtocol=https;AccountName=name;AccountKey=yourkey;EndpointSuffix=core.windows.net" />
                

                没有空格或换行符!!

                【讨论】:

                  【解决方案15】:

                  错误消息没有说明帐户密钥错误,但这是我的问题。

                  我正在开发一个新应用程序,并从我们团队的配置文件中复制/粘贴了密钥。我开始在新应用程序中遇到此错误,但唯一一个工作正常。事实证明,在我们的配置文件中,+\u002B 替换。复制/粘贴正确的密钥后,新应用运行良好。

                  【讨论】:

                    【解决方案16】:

                    我也遇到了同样的问题,我在命名空间中找到了它。 CloudStorageAccount 类存在于两个命名空间中

                    using Microsoft.WindowsAzure;
                    
                    using Microsoft.WindowsAzure.Storage;
                    

                    所以我只是删除了WindowsAzure 命名空间并在我的代码中添加了WindowsAzure.Storage

                    以前的代码:

                    using Microsoft.WindowsAzure;
                    

                    固定代码:

                    using Microsoft.WindowsAzure.Storage;
                    

                    【讨论】:

                      猜你喜欢
                      • 2018-01-13
                      • 1970-01-01
                      • 2017-11-08
                      • 1970-01-01
                      • 2021-01-18
                      • 2019-04-06
                      • 2021-10-22
                      • 1970-01-01
                      • 2022-11-11
                      相关资源
                      最近更新 更多