0

我正在为我的服务实施分块上传解决方案,该解决方案将 blob 存储在 Azure 中。这是使用 azure-sdk-for-java 用 Clojure 编写的。我能够将块作为块 blob 中的块上传和提交。但是,在我上传任何块之前,必须执行一些验证。这包括检查用户到目前为止上传了多少内容与他们提供的内容范围(我们不允许重新上传块)。

为了完成这些检查,我使用 CloudBlockBlob 的方法 downloadBlockList 来根据需要获取有关已提交和未提交块的数据(并在需要提交时获取块列表)。但是,在某些情况下,这会失败,并且我收到以下异常:“com.microsoft.windowsazure.services.core.storage.StorageException:服务器无法对请求进行身份验证。确保 Authorization 标头的值格式正确,包括签名。”

这很奇怪,因为如果在上传块后调用 downloadBlockList,我永远不会遇到此失败,但如果我调用该方法但不上传,我会得到它(在某些情况下,但总是相同的情况下)。如果我捕捉到异常并立即再次调用 downloadBlockList,它工作正常。

我已经使用 tcpdump 来查看正在发送的标头,因为在某些论坛上人们提到 x-ms-date 设置错误,但事实并非如此,并且看起来没有任何错误。响应为 403,并抱怨请求中的 MAC 签名错误。

有谁知道为什么有时会发生这种情况,但是如果我再次调用该方法,之后立即以相同的方式,它会起作用吗?

4

1 回答 1

0

我在 Azure 存储 SDK 上工作。您能否提供您提到的跟踪。如果可能的话,这个错误发生的帐户名称/时间,所以我可以在我们这边调查一下。您可以私下发送到 Microsoft /.com 上的 joegiard。

我们将使用调查结果为 stackoverflow 社区更新此线程。

于 2013-02-21T18:17:05.723 回答