我有一个MVC4项目,我正在使用Azure网站预览运行。
我的问题是,当我将网站部署到azure时,我无法将blob上传到我的blob存储容器中,但是当我在本地调试时上传工作正常。
这是我在部署时获得的异常和堆栈跟踪,我尝试上传到容器:
找不到有效的帐户信息组合。 Microsoft.WindowsAzure.Storage.CloudStorageAccure.b__0(String err)at Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(String s,CloudStorageAccount&accountInformation,Action`1 error)at Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(String connectionString)atMicrosoft.WindowsAzure.Storage.CloudStorageAccount.b__0(String err)at Microsoft 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部署发布过程中被搞乱,但我不确定如何解决这个问题?
将存储连接字符串存储在AppSettings中,而不是存储在ConnectionStrings部分中。并且,在这里粘贴实际的连接字符串将帮助我们(您可以为帐户密钥添加*)。
我收到此错误是因为我使用了错误的nuget包,(我使用的是dot net 4.6.1)
错误的包是:WindowsAzure Storage.Helper
正确的包是:WindowsAzure.Storage
并确保使用命名空间:using Microsoft.WindowsAzure.Storage;
当我使用@Microsoft.KeyVault(SecretUri = https ...)将存储连接字符串从应用程序设置文字迁移到keyvault引用时,我遇到了此错误我创建了一个新的功能应用程序并且忘记打开系统分配身份并授予应用程序访问keyvault的权限。因此,症状是未定义的应用程序设置值 - 存储连接尝试失败。
我将分享我的问题的解决方案。我认为括号必须保留并输入其中的信息。删除括号后,我的问题解决了。
从:
string eventHubName = "{Event Hub name}";
至:
string eventHubName = "Event Hub name";
同样适用于:eventHubConnectionString,storageAccountName和storageAccountKey
我也遇到了同样的问题,我在命名空间中找到了它。 CloudStorageAccount类存在于两个名称空间中
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
所以我刚刚删除了WindowsAzure
命名空间并在我的代码中添加了WindowsAzure.Storage
。
上一个代码:
using Microsoft.WindowsAzure;
固定代码:
using Microsoft.WindowsAzure.Storage;
确保这一点
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”,并确保没有空格和瞧。
获取CloudStorageAccount实例的另一种方法是执行此操作
StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
这应该可以帮助任何有此解析问题的人。
我认为,这可能不是Sandino Di Mattia所表达的问题的原因。在将SDK升级到2.0时,我有同样的一个,结果证明API的连接字符串解析器不再容忍连接字符串中的空格,并且在任何地方都没有提到。如果这种改变是故意的,我会称之为令人讨厌的举动......
请注意,连接字符串中的外壳很重要。我在Web.config中将大型合并导致某人“AccountName”变为“Accountname”之前遇到此错误。使用正确的外壳修复了错误。
如果您非常确定,从Azure服务复制的连接字符串与您粘贴的相同,那么请检查您是否为了可读性而给出了任何回车/空格,这也是导致该问题的原因之一有经验的。我试图给@scottndecker +1,但由于我没有15点声望,所以不能。
使用proxyUri时,请不要忘记包含“https://”或“https://”。喜欢:
UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1
我得到了这个,因为我意外地在字符串的末尾添加了换行符(\ r \ n)。
我面临同样的问题。您需要使用Microsoft.WindowsAzure.Storage
名称空间并确保连接字符串中没有额外的空格。