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

Oli*_*son 21 c# connection-string azure azure-blob-storage

我有一个MVC4项目,我正在使用Azure网站预览运行.

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

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

找不到有效的帐户信息组合.在Microsoft.WindowsAzure.Storage.CloudStorageAccount.b__0(字符串ERR)在Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(字符串s CloudStorageAccount&accountInformation,Action`1误差)在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();
Run Code Online (Sandbox Code Playgroud)

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

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

sco*_*ker 26

确保这一点

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",并确保没有空格和瞧.

  • 删除白色空间对我来说.谢谢!好教程:http://www.codeproject.com/Articles/490178/How-to-Use-Azure-Blob-Storage-with-Azure-Web-Sites (3认同)
  • 我不知道空间会是个问题!!删除空格解决了这个问题。谢谢! (2认同)

And*_*eas 16

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

StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
Run Code Online (Sandbox Code Playgroud)

这应该可以帮助任何有此解析问题的人.

  • StorageCredentials 类现在是抽象类,请使用 StorageCredentialsAccountAndKey 类代替 (3认同)

ast*_*kov 15

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

  • 是的,奥哈德,大概。但不是在 2012 年,当时配置管理器的连接字符串提供者不知道 Azure 存储连接字符串,当问题发布时**和**回答...... (3认同)
  • 为什么这会有什么不同?最后它只是一个字符串,而`ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString` 对我来说很好用......不用说,将它保存为连接字符串更有意义。 (2认同)

vla*_*mir 7

我收到此错误是因为在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"
  }
}
Run Code Online (Sandbox Code Playgroud)

正确的appsettings.json

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