azure blob storage"找不到有效的帐户信息组合"

时间:2012-12-17 11:47:43

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

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

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

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

  

找不到有效的帐户信息组合。在Microsoft.WindowsAzure.Storage.CloudStorageAccount.b__0(String err)at at   Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(String s,   CloudStorageAccount&安培; accountInformation,Action`1 error)at   Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(字符串   connectionString)at   MyProj.Controllers.ImageController.Upload(ImageViewModel model)

具体来说,根据堆栈跟踪,它是失败的.Parse方法。

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

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

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

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

15 个答案:

答案 0 :(得分:21)

确保

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

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

(注意分号后的空格)

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

<强> --- ---- EDIT

实际上把“https”搞砸了。 Worker角色会抛出一个异常(“Handshack因意外的数据包格式而失败。”)然后在未知和被破坏之间循环。删除了“https”中的“s”,并确保没有空格和瞧。

答案 1 :(得分:16)

获取CloadStorageAccount实例的另一种方法是执行此操作

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

这可以帮助任何有此解析问题的人。

答案 2 :(得分:14)

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

答案 3 :(得分:3)

我认为,这可能不是Sandino Di Mattia所表达的问题的原因。在将SDK升级到2.0时,我有同样的一个,结果证明API的连接字符串解析器不再容忍连接字符串中的空格,并且在任何地方都没有提到。如果这种改变是故意的,我会称之为令人讨厌的举动......

答案 4 :(得分:2)

我收到此错误是因为在 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"
  }
}

答案 5 :(得分:1)

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

答案 6 :(得分:0)

如果您非常确定,从Azure服务复制的连接字符串与您粘贴的相同,请检查您是否为了可读性而给出了任何回车/空格,它也是其中一个原因导致您遇到的问题。 我试图为@scottndecker提供+1,但由于我没有15个声誉,因此无法获得+1。

答案 7 :(得分:0)

不要忘记包含&#34; https://&#34;或&#34; https://&#34;使用proxyUri时。 喜欢:

UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1

答案 8 :(得分:0)

我得到了这个,因为我意外地在字符串的末尾添加了换行符(\ r \ n)。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

错误的软件包是:     WindowsAzureStorage.Helper

正确的软件包是:     WindowsAzure.Storage

,并确保使用名称空间:     使用Microsoft.WindowsAzure.Storage;

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我将分享我的问题的解决方案。我当时认为括号必须保留并在其中输入信息。卸下括号后,我的问题解决了。

发件人:

string eventHubName = "{Event Hub name}";

收件人:

string eventHubName = "Event Hub name";

同样适用于:eventHubConnectionString,storageAccountName和storageAccountKey

答案 13 :(得分:0)

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

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

没有空格或换行符!!

答案 14 :(得分:-1)

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

list derivation

所以我刚刚删除了using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.Storage; 命名空间,并在代码中添加了WindowsAzure

先前的代码:

WindowsAzure.Storage

固定代码:

using Microsoft.WindowsAzure;