Я реализую пакетное решение для загрузки для моего сервиса, в котором хранятся blobs в Azure. Это написано на Clojure, используя azure-sdk-for-java. Я могу загружать и фиксировать куски в виде блоков в блочном блобе. Однако перед отправкой любого блока необходимо выполнить некоторую проверку. Это включает в себя такие вещи, как проверка того, сколько пользователь загрузил до сих пор в отношении контента, который они предоставляют (мы не разрешаем повторную загрузку блоков).CloudBlockBlob downloadBlockList Иногда бросает Хранение Исключение (не удалось аутентифицировать)
Чтобы выполнить эти проверки, я использую метод CloudBlockBlob, downloadBlockList, чтобы получить данные о заблокированных и незафиксированных блоках по мере необходимости (а также получить список блоков, когда пришло время совершить). Однако в некоторых случаях это не удается, и я получаю следующее исключение: «com.microsoft.windowsazure.services.core.storage.StorageException: сервер не смог аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись."
Это странно, потому что я никогда не получаю этот отказ, если я вызову downloadBlockList после загрузки блока, но я получаю его (иногда, но всегда в тех же случаях), если я вызываю метод и не загружаю. Если я поймаю исключение и сразу вызову downloadBlockList, он отлично работает.
Я использовал tcpdump, чтобы взглянуть на отправляемые заголовки, так как на некоторых форумах люди упомянули, что x-ms-date настроена неправильно, но это не так, и ничего не выглядит некорректным. Ответ равен 403 и жалуется на то, что подпись MAC в неправильном запросе.
Есть ли у кого-нибудь идеи, почему это происходит иногда, но если я снова вызову метод, сразу после того, как это работает, это работает?
Благодаря Джо, я послал по электронной почте – SirSlush86
Просто, чтобы добавить что-то еще я обнаружил. Если я использую API остального, чтобы изучить один из моих неудачных капель, я получаю некоторые странные ответы. В момент сбоя должно быть 2 незафиксированных блока и не зафиксированные блоки. Если я использую параметры запроса: comp = blocklist & timeout = 90 & blocklisttype = COMMITTED, я правильно получаю ответ XML, который показывает, что нет заблокированных блоков, но если я использую все или uncommitted как blocklisttype, я получаю ошибку 404, заявляя, что ресурс не есть – SirSlush86
Любое решение для этого? –