私は自分のサービスにチャンクアップロードソリューションを実装しています。これは、AzureにBLOBを格納します。これは、azure-sdk-for-javaを使用してClojureで記述されています。チャンクをブロックブロブのブロックとしてアップロードしてコミットすることができます。ただし、ブロックをアップロードする前に、いくつかの検証を実行する必要があります。これには、ユーザーがこれまでにアップロードした量を、ユーザーが提供するコンテンツ範囲と照合するなどが含まれます(ブロックの再アップロードは許可されていません)。
これらのチェックを実行するために、CloudBlockBlobのメソッドdownloadBlockListを使用して、必要に応じてコミットされたブロックとコミットされていないブロックに関するデータを取得します(また、コミットするときにブロックリストを取得します)。ただし、場合によってはこれが失敗し、次の例外が発生します。 "com.microsoft.windowsazure.services.core.storage.StorageException:サーバーが要求の認証に失敗しました。Authorizationヘッダーの値が正しく形成されていることを確認してください。サイン。"
ブロックをアップロードした後にdownloadBlockListを呼び出すとこの失敗が発生しないため、これは奇妙ですが、メソッドを呼び出してアップロードしないと(場合によっては、常に同じ場合に)発生します。例外をキャッチしてすぐにdownloadBlockListを再度呼び出すと、正常に機能します。
一部のフォーラムではx-ms-dateが間違って設定されていると言われているため、tcpdumpを使用して、送信されているヘッダーを確認しましたが、そうではなく、何も正しくないように見えます。応答は403であり、要求のMAC署名が間違っていると文句を言います。
なぜこれが時々起こるのか誰かが何か考えを持っていますが、私がその直後にもう一度メソッドを呼び出すと、同じように機能しますか?