Я внезапно получаю ошибку Bad Request (400) при использовании эмулятора хранилища Azure при попытке CreateIfNotExists. Ответ на внутреннее исключение говорит: «Значение одного из заголовков HTTP имеет неправильный формат». Все таблицы существуют, данные в таблицах, все работало до обновления моих пакетов NuGet. Оглядываясь на SO, кажется, что распространенной причиной является обновление клиентской библиотеки хранилища Azure (теперь версия 5.0.0), которое создает несоответствие. Я обновил пакет Azure SDK до версии 2.6 (поскольку у меня VS2012). Это доводит эмулятор хранилища до 4.0.0.0, но все равно не повезло ... та же ошибка. Это своего рода плохая вещь, что внезапное обновление пакета пакета пакета приводит к поломке всего этого и полностью убивает мой довольно большой проект. Любые идеи?
Неверный запрос эмулятора хранилища Azure 400
Ответы (4)
В моем случае проблема была связана с именем контейнера, которое имеет строгие требования к именованию.
А именно:
- Разрешены только строчные буквы, цифры и тире.
- Должно быть от 3 до 63 символов.
Для получения дополнительной информации см. Именование и ссылки на контейнеры, большие двоичные объекты и метаданные в MSDN.
Я не знаю, является ли это проблемой для кого-то еще, но вот что я выяснил ...
- Эмулятор хранилища 4.1.0.0 используется с клиентской библиотекой службы хранилища Azure 5.0.0.
- Эмулятор хранилища 4.1.0.0 поставляется с пакетом SDK для Azure 2.7.
- Пакет Azure SDK 2.7 не будет работать с Visual Studio 2012.
- Пакет Azure SDK 2.6 для VS2012 имеет эмулятор 4.0.0.0. Я не знаю, с какой совместимой клиентской библиотекой хранилища ... Я пробовал 4.3.0.0, 5.0.0.0 и 5.0.2, но безуспешно
.
Мои "философские" проблемы со всем этим ...
- Я не могу найти заметной связи между версиями эмулятора хранилища и версиями клиентской библиотеки хранилища .... Числа не «совпадают»; нет ошибок, зависимостей или исключений, которые говорят вам об отношениях; Я не могу найти никаких справок, перекрестных ссылок или таблиц, которые описывают правильную комбинацию библиотек.
- Теория «просто используйте последнюю версию» не работает, потому что в прошлом они выпускали новые версии клиентской библиотеки хранилища (3.0.0.0) без рабочего эмулятора, а теперь «последняя версия» каждой отдельно зависит от какой SDK доступен для вашей среды сборки (VS2012 против VS2015)
Я понимаю, что клиентская библиотека хранилища технически не «зависит» от эмулятора ... вам не нужен эмулятор для использования хранилища Azure. Тем не менее, было бы хорошо, если бы такому программисту, как я, было бы легче понять некоторые из этих отношений.
Для меня эта проблема возникла при обновлении до последней версии WindowsAzure.Storage version 9.3.1
пакета.
После нескольких часов тестирования различных комбинаций имен контейнеров и прочего, самым простым решением было вернуться к более старой и работающей version 8.6.0
!
Если я не ошибаюсь, вам также потребуется понизить версию клиентских библиотек до 4.x.
Видите ли, каждая версия клиентской библиотеки хранилища соответствует версии REST API службы хранилища, и то же самое относится и к эмулятору хранилища. Если вы используете эмулятор хранилища версии 4.0, вы не сможете использовать с ним клиентскую библиотеку хранилища 5. Для этого вам нужно будет использовать версию 4.x.
Если вы хотите использовать клиентскую библиотеку хранилища версии 5, у вас есть 2 варианта:
- Воспользуйтесь последней версией эмулятора хранилища или
- Сделайте свою разработку против учетной записи облачного хранилища.