Неправильный запрос хранилища данных Azure 400

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

4 ответа

Решение

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

  • Storage Emulator 4.1.0.0 - это тот, который используется с клиентской библиотекой хранилища Azure 5.0.0
  • Storage Emulator 4.1.0.0 поставляется с Azure SDK 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, но безуспешно

,

Мои "философские" проблемы со всем этим...

  • Я не могу найти никакой заметной связи между версиями Storage Emulator и версиями Storage Client Library.... Номера не "совпадают"; нет никаких ошибок, зависимостей или исключений, которые сообщают вам об отношениях; Я не могу найти справку, перекрестную ссылку или таблицу, которая описывает правильную комбинацию библиотек.
  • Теория "просто используйте последнюю версию" не работает, потому что в прошлом они выпускали новые версии библиотеки клиента хранилища (3.0.0.0) без работающего эмулятора, и теперь "последняя версия" каждого отдельно зависит от какой SDK доступен для вашей среды сборки (VS2012 против VS2015)

Я понимаю, что клиентская библиотека хранилища технически не "зависит" от эмулятора... вам не нужен эмулятор для использования хранилища Azure. Тем не менее, было бы неплохо, если бы некоторые из этих отношений были немного проще для программиста вроде меня.

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

А именно:

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

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

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

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

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

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

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

  1. Используйте последнюю версию эмулятора хранилища или
  2. Занимайтесь разработкой против учетной записи облачного хранилища.
Другие вопросы по тегам