Неверный запрос эмулятора хранилища Azure 400

Я внезапно получаю ошибку Bad Request (400) при использовании эмулятора хранилища Azure при попытке CreateIfNotExists. Ответ на внутреннее исключение говорит: «Значение одного из заголовков HTTP имеет неправильный формат». Все таблицы существуют, данные в таблицах, все работало до обновления моих пакетов NuGet. Оглядываясь на SO, кажется, что распространенной причиной является обновление клиентской библиотеки хранилища Azure (теперь версия 5.0.0), которое создает несоответствие. Я обновил пакет Azure SDK до версии 2.6 (поскольку у меня VS2012). Это доводит эмулятор хранилища до 4.0.0.0, но все равно не повезло ... та же ошибка. Это своего рода плохая вещь, что внезапное обновление пакета пакета пакета приводит к поломке всего этого и полностью убивает мой довольно большой проект. Любые идеи?


person WirelessG    schedule 01.09.2015    source источник
comment
Какую версию клиентской библиотеки хранилища вы используете в своем проекте?   -  person Gaurav Mantri    schedule 01.09.2015
comment
5.0.0 Я также пробовал новую предварительную версию, но она тоже не сработала.   -  person WirelessG    schedule 02.09.2015


Ответы (4)


В моем случае проблема была связана с именем контейнера, которое имеет строгие требования к именованию.

А именно:

  • Разрешены только строчные буквы, цифры и тире.
  • Должно быть от 3 до 63 символов.

Для получения дополнительной информации см. Именование и ссылки на контейнеры, большие двоичные объекты и метаданные в MSDN.

person Arash Motamedi    schedule 25.05.2016

Я не знаю, является ли это проблемой для кого-то еще, но вот что я выяснил ...

  • Эмулятор хранилища 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. Тем не менее, было бы хорошо, если бы такому программисту, как я, было бы легче понять некоторые из этих отношений.

person WirelessG    schedule 03.09.2015
comment
Похоже, что Storage Client Library 6.0.0 использует версию REST API от 05.04.2015, которая поддерживается только в эмуляторе версии 4.2. - person Juha Palomäki; 30.10.2015
comment
У кого-то такая же проблема и ответ от команды Azure здесь github.com / Azure / azure-storage-net / issues / 183 - это обновление до эмулятора хранилища версии 4.2. - person Simon Ness; 29.11.2015

Для меня эта проблема возникла при обновлении до последней версии WindowsAzure.Storage version 9.3.1 пакета.

После нескольких часов тестирования различных комбинаций имен контейнеров и прочего, самым простым решением было вернуться к более старой и работающей version 8.6.0!

person bit    schedule 25.08.2018

Если я не ошибаюсь, вам также потребуется понизить версию клиентских библиотек до 4.x.

Видите ли, каждая версия клиентской библиотеки хранилища соответствует версии REST API службы хранилища, и то же самое относится и к эмулятору хранилища. Если вы используете эмулятор хранилища версии 4.0, вы не сможете использовать с ним клиентскую библиотеку хранилища 5. Для этого вам нужно будет использовать версию 4.x.

Если вы хотите использовать клиентскую библиотеку хранилища версии 5, у вас есть 2 варианта:

  1. Воспользуйтесь последней версией эмулятора хранилища или
  2. Сделайте свою разработку против учетной записи облачного хранилища.
person Gaurav Mantri    schedule 02.09.2015
comment
Эмулятор хранения является частью Azure SDK. Если у вас VS2012, то SDK - 2.6. Эмулятор хранилища для 2.6 - 4.0.0.0. Последняя версия клиентской библиотеки хранилища - 5.0.0. Итак, вы говорите, что вам нужно обновить SDK 2.7 (и, следовательно, VS2015), чтобы получить версию эмулятора, которая работает с клиентской библиотекой 5.0.0.0? Это похоже на плохой черный ход, заставляющий людей обновлять Visual Studio без их ведома. - person WirelessG; 02.09.2015
comment
да. Чтобы использовать последнюю версию эмулятора хранилища, вам понадобится последний SDK (2.7), который поддерживается как в VS 2013, так и в 2015 (к сожалению, VS 2012). - person Gaurav Mantri; 02.09.2015
comment
Кроме того, понижение версии клиентской библиотеки хранилища до 4.3.0.0 (в соответствии с моим эмулятором 4.0.0) также не работает. Никаких исключений, просто каждый вызов возвращает тихую ложь. - person WirelessG; 02.09.2015