我正在为我的服务实现分块上传解决方案,它将blob存储在Azure中。这是用Clojure编写的,使用azure-sdk-for-java。我能够上传和提交块作为块blob中的块。但是,在我上传任何块之前,必须执行一些验证。这包括检查用户到目前为止根据他们提供的内容范围上传了多少内容(我们不允许重新上传区块)。
为了完成这些检查,我使用CloudBlockBlob的方法downloadBlockList来根据需要获取有关已提交和未提交块的数据(还可以在提交时获取块列表)。但在某些情况下,此操作会失败,并收到以下异常:"com.microsoft.windowsazure.services.core.storage.StorageException:服务器无法验证请求。请确保包括签名在内的授权标头的值的格式正确。“
这很奇怪,因为如果我在上传一个块之后调用downloadBlockList,我永远不会得到这个失败,但如果我调用这个方法而不上传,我会得到它(在某些情况下,但总是相同的情况)。如果我捕捉到异常并立即再次调用downloadBlockList,它就能正常工作。
我使用tcpdump查看了正在发送的标头,因为在一些论坛上,人们提到x-ms-date设置错误,但事实并非如此,没有任何内容看起来是错误的。响应是403,并抱怨请求中的MAC签名错误。
有没有人知道为什么有时会发生这种情况,但如果我再次调用该方法,紧接着,以相同的方式,它会工作吗?
发布于 2013-02-22 02:17:06
我在Azure Storage SDK上工作。你能提供你提到的痕迹吗。如果可能的话,还有这个错误发生的帐户名/时间,这样我就可以在我们这方面进行调查了。你可以私下发送到joegiard at Microsoft /.com。
我们将使用调查结果更新stackoverflow社区的此帖子。
乔
https://stackoverflow.com/questions/15008035
复制相似问题