Java CloudBlockBlob downloadBlockList有时引发存储异常(身份验证失败)

Java CloudBlockBlob downloadBlockList有时引发存储异常(身份验证失败),java,azure,Java,Azure,我正在为我的服务实现一个分块上传解决方案,它将blob存储在Azure中。这是用Clojure编写的,使用azure sdk for java。我能够上传和提交块作为块blob中的块。然而,在上传任何块之前,必须执行一些验证。这包括根据用户提供的内容范围检查用户到目前为止上传了多少内容(我们不允许重新上传块) 为了完成这些检查,我使用CloudBlockBlob的方法downloadBlockList根据需要获取有关已提交和未提交块的数据(以及在提交时获取块列表)。但是,在某些情况下,这会失败,

我正在为我的服务实现一个分块上传解决方案,它将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签名错误


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

我在Azure存储SDK上工作。你能提供你提到的线索吗。如果可能的话,请提供发生此错误的帐户名/时间,以便我可以在我们这方面进行调查。您可以通过Microsoft/.com私下发送给joegiard

我们将根据调查结果为stackoverflow社区更新此线程


谢谢乔,我发了一封电子邮件只是想补充我发现的其他东西。如果我使用RESTAPI检查我的一个失败blob,我会得到一些奇怪的响应。在故障点,应该有2个未提交的块,并且没有提交的块。如果我使用查询参数comp=blocklist&timeout=90&blocklisttype=COMMITTED,我会正确地得到一个显示没有提交块的XML响应,但是如果我使用all或uncommitted作为blocklisttype,我会得到一个404错误,说资源不存在此问题的解决方案?