Azure blob storage "Не найдено правильной комбинации информации учетной записи" - программирование

Azure blob storage "Не найдено правильной комбинации информации учетной записи"

У меня есть проект MVC4, который я использую для предварительного просмотра веб-сайтов Azure.

Моя проблема заключается в том, что я не могу загрузить большой двоичный объект в свой контейнер для хранения больших двоичных объектов, когда развернул свой веб-сайт в Azure, однако загрузка работает нормально при локальной отладке.

Это исключение и трассировка стека, которые я получаю при развертывании и пытаюсь загрузить в контейнер:

Действительная комбинация информации об учетной записи не найдена. в Microsoft.WindowsAzure.Storage.CloudStorageAccount.b__0 (String err) в Microsoft.WindowsAzure.Storage.CloudStorageAccount.TryParse(String s, CloudStorageAccount & accountInformation, ошибка Action1) в Microsoft.WindowsAzure.Storage.ccStoreSringStringring в MyProj.Controllers.ImageController.Upload (модель ImageViewModel)

В частности, согласно трассировке стека это метод .Parse, который не работает.

Код, который я использую для подключения к хранилищу BLOB-объектов, прямо из документации Azure с практическими рекомендациями:

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

Еще раз, это работает нормально, когда я работаю локально на своем устройстве dev, я могу загрузить успешно без проблем. Однако при развертывании я получаю эту ошибку, и я пытаюсь сделать то же самое.

Я предполагаю, что моя storageConnectionString испорчена во время процесса публикации в Интернете, но я не уверен, как решить эту проблему?

4b9b3361

Ответ 1

Сохраните строку подключения к хранилищу в AppSettings, а не в разделе ConnectionStrings. И, вставив сюда, фактическая строка соединения поможет нам помочь вам (вы можете поместить * для ключа учетной записи).

Ответ 2

Убедитесь, что

1) Вы используете надлежащий протокол для диагностики (дважды щелкните вкладку "Роль → " → выберите конфигурацию → в разделе "Диагностика", щелкните эллипсис → попробуйте нажать "ОК"... если он дает ошибку что вы должны использовать https, измените строки подключения на https)

и

2) Разрешены пробелы... т.е.   UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1 вместо   UseDevelopmentStorage=true; DevelopmentStorageProxyUri=https://127.0.0.1

(пробел после запятой)

Проверьте https и пробел во всех строках подключения на вкладке "Настройки"

--- EDIT ----

Ввод "https" в самом деле завязал все для нас. Роль рабочего может вызвать исключение ( "Handshack failed из-за неожиданного формата пакета" ), а затем цикл между неизвестным и уничтоженным. Удалили "s" в "https" и убедились, что не было белых пробелов и вуаля.

Ответ 3

Другой способ получить экземпляр CloadStorageAccount делает это

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

Это должно помочь любому, у кого есть эта проблема синтаксического анализа.

Ответ 4

Я думаю, что это не могло быть причиной проблемы, как это выразил Сандино Ди Маттиа. У меня было то же самое при обновлении SDK до 2.0 и оказалось, что парсер строки API-интерфейса не допускает больше пробелов в строке соединения, и он нигде не упоминался. Если такое изменение было намеренным, я бы назвал это неприятным шагом...

Ответ 5

Помните также, что корпус в строке соединения имеет значение. Я испытал эту ошибку раньше, когда большое слияние вызвало у кого-то имя "AccountName" на "Accountname" в моем Web.config. Использование правильного корпуса исправило ошибку.

Ответ 6

Если вы уверены, что строка подключения, скопированная из службы Azure, такая же, как вы вставили, а затем проверьте, предоставили ли вы карету возврат/пространство для удобства чтения, это также одна из причин, вызвавших эту проблему которые вы испытали. Я попытался дать +1 для @scottndecker, но не смог, так как у меня нет 15 репутации.

Ответ 7

Не забудьте включить "https://" или "https://" при использовании proxyUri. Например:

UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1

Ответ 8

Я получил это, потому что я случайно добавил символ новой строки (\ r\n) в конце строки.

Ответ 9

Я столкнулся с той же проблемой. Вам необходимо использовать пространство имен Microsoft.WindowsAzure.Storage и убедиться, что в строке подключения нет лишних пробелов.

Ответ 10

Я получил эту ошибку, потому что я использовал неправильный пакет nuget (я использую dot net 4.6.1)

Неправильный пакет был: WindowsAzureStorage.Helper

Правильный пакет: WindowsAzure.Storage

и убедитесь, что вы используете пространство имен: using Microsoft.WindowsAzure.Storage;

Ответ 11

Я столкнулся с этой ошибкой, когда перенес строку подключения к хранилищу из литерала настроек приложения в ссылку keyvault, используя @Microsoft.KeyVault(SecretUri = https...). Я создал новое приложение-функцию и забыл включить назначенный системой личность и дали приложению доступ к keyvault. Следовательно, симптомом было неопределенное значение параметров приложения - неудачная попытка подключения к хранилищу.

Ответ 12

Я также получил ту же проблему, и я нашел ее в пространстве имен. Класс CloudStorageAccount присутствует в обоих пространствах имен

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.Storage;

Поэтому я просто удалил пространство имен WindowsAzure и добавил в свой код WindowsAzure.Storage.

Предыдущий код:

using Microsoft.WindowsAzure;

Фиксированный код:

using Microsoft.WindowsAzure.Storage;