Ответ 1
Сохраните строку подключения к хранилищу в AppSettings, а не в разделе ConnectionStrings. И, вставив сюда, фактическая строка соединения поможет нам помочь вам (вы можете поместить * для ключа учетной записи).
У меня есть проект 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 испорчена во время процесса публикации в Интернете, но я не уверен, как решить эту проблему?
Сохраните строку подключения к хранилищу в AppSettings, а не в разделе ConnectionStrings. И, вставив сюда, фактическая строка соединения поможет нам помочь вам (вы можете поместить * для ключа учетной записи).
Убедитесь, что
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" и убедились, что не было белых пробелов и вуаля.
Другой способ получить экземпляр CloadStorageAccount делает это
StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
Это должно помочь любому, у кого есть эта проблема синтаксического анализа.
Я думаю, что это не могло быть причиной проблемы, как это выразил Сандино Ди Маттиа. У меня было то же самое при обновлении SDK до 2.0 и оказалось, что парсер строки API-интерфейса не допускает больше пробелов в строке соединения, и он нигде не упоминался. Если такое изменение было намеренным, я бы назвал это неприятным шагом...
Помните также, что корпус в строке соединения имеет значение. Я испытал эту ошибку раньше, когда большое слияние вызвало у кого-то имя "AccountName" на "Accountname" в моем Web.config. Использование правильного корпуса исправило ошибку.
Если вы уверены, что строка подключения, скопированная из службы Azure, такая же, как вы вставили, а затем проверьте, предоставили ли вы карету возврат/пространство для удобства чтения, это также одна из причин, вызвавших эту проблему которые вы испытали. Я попытался дать +1 для @scottndecker, но не смог, так как у меня нет 15 репутации.
Не забудьте включить "https://" или "https://" при использовании proxyUri. Например:
UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1
Я получил это, потому что я случайно добавил символ новой строки (\ r\n) в конце строки.
Я столкнулся с той же проблемой. Вам необходимо использовать пространство имен Microsoft.WindowsAzure.Storage
и убедиться, что в строке подключения нет лишних пробелов.
Я получил эту ошибку, потому что я использовал неправильный пакет nuget (я использую dot net 4.6.1)
Неправильный пакет был: WindowsAzureStorage.Helper
Правильный пакет: WindowsAzure.Storage
и убедитесь, что вы используете пространство имен: using Microsoft.WindowsAzure.Storage;
Я столкнулся с этой ошибкой, когда перенес строку подключения к хранилищу из литерала настроек приложения в ссылку keyvault, используя @Microsoft.KeyVault(SecretUri = https...). Я создал новое приложение-функцию и забыл включить назначенный системой личность и дали приложению доступ к keyvault. Следовательно, симптомом было неопределенное значение параметров приложения - неудачная попытка подключения к хранилищу.
Я также получил ту же проблему, и я нашел ее в пространстве имен. Класс CloudStorageAccount присутствует в обоих пространствах имен
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
Поэтому я просто удалил пространство имен WindowsAzure
и добавил в свой код WindowsAzure.Storage
.
Предыдущий код:
using Microsoft.WindowsAzure;
Фиксированный код:
using Microsoft.WindowsAzure.Storage;