我有一个使用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部署发布过程中被搞乱,但我不确定如何解决这个问题?
答案 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;