You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用CloudBlockBlob.CreateSnapshot()遇参数越界StorageException问题排查

解决Azure Blob存储CreateSnapshot()抛出ArgumentOutOfRangeException的问题

这个问题大概率是WindowsAzure.Storage SDK 8.7.0的已知Bug,而非你的代码实现错误,下面具体分析原因和解决方案:

问题原因分析

从你提供的异常栈可以看到,错误发生在NavigationHelper.ParseSnapshotTime方法中——这个方法负责把存储服务返回的快照时间字符串解析成DateTime对象。在8.7.0版本的SDK里,存在一个时间解析的逻辑缺陷:当存储服务返回的时间字符串包含超过3位的毫秒精度,或者时间格式和SDK预期的不完全匹配时,就会触发ArgumentOutOfRangeException。

你的代码逻辑本身没有问题:遍历容器内的Blob、跳过已有的快照、创建新快照并添加元数据的流程都是合理的,错误完全来自SDK内部的解析逻辑。

解决方案

1. 优先升级SDK版本(最彻底的解决办法)

微软在8.7.0之后的版本中修复了这个时间解析的Bug,建议你把WindowsAzure.Storage NuGet包升级到8.7.1及以上版本,或者直接升级到该SDK系列的最新稳定版(比如9.3.3)。升级后这个问题应该会直接消失。

2. 临时Workaround(如果无法立即升级)

如果暂时不能升级SDK,可以尝试修改调用CreateSnapshot的方式:直接在创建快照时传入元数据,而不是创建后再添加。这样可能绕过SDK内部的错误路径:

// 初始化元数据字典
var metadata = new Dictionary<string, string> { { "snapshotIssued", snapDate.ToString() } };
// 直接传入元数据创建快照,无需后续单独设置
var snapBlob = blob.CreateSnapshot(metadata);

不过这个方法只是临时的权宜之计,还是推荐优先升级SDK来彻底解决问题。

另外,你的代码中跳过快照Blob、捕获单个Blob异常的处理逻辑是合理的,这部分不需要调整。

内容的提问来源于stack exchange,提问作者ThatUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:39:32