27

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

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

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

未找到有效的帐户信息组合。在 Microsoft.WindowsAzure.Storage.CloudStorageAccount.b__0(String err) 在 Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(String s, CloudStorageAccount& accountInformation, Action`1 错误) 在 Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(String connectionString)在 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 在网络部署发布过程中被弄乱了,但我不确定如何解决这个问题?

4

15 回答 15

32

请确保

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”,并确保没有空格,瞧。

于 2013-10-16T15:47:16.703 回答
18

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

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

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

于 2014-06-30T08:20:24.263 回答
16

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

于 2012-12-17T18:27:58.463 回答
3

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

于 2013-04-23T12:16:14.273 回答
3

我收到此错误是因为在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"
  }
}
于 2021-04-08T06:59:37.547 回答
1

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

于 2016-08-24T16:11:20.673 回答
0

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

于 2015-04-14T05:05:06.573 回答
0

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

UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1

于 2017-12-17T23:04:17.977 回答
0

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

从:

string eventHubName = "{Event Hub name}";

至:

string eventHubName = "Event Hub name";

这同样适用于:eventHubConnectionString、storageAccountName 和 storageAccountKey

于 2019-08-01T13:47:15.160 回答
0

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

于 2018-01-12T14:48:54.503 回答
0

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

于 2019-05-16T05:19:01.780 回答
0

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

错误的包是:WindowsAzureStorage.Helper

正确的包是:WindowsAzure.Storage

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

于 2019-03-19T12:47:22.710 回答
0

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

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

没有空格或换行符!!

于 2021-02-24T10:08:31.517 回答
0

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

于 2018-09-19T10:34:36.047 回答
-1

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

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.Storage;

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

以前的代码:

using Microsoft.WindowsAzure;

固定代码:

using Microsoft.WindowsAzure.Storage;
于 2018-08-10T05:33:37.903 回答