我们的应用程序执行多批TableBatchOperation
。我们确保每个表批处理操作都具有
遵循以下内容:
foreach (var batch in batches)
{
var operation = new TableBatchOperation();
operation.AddRange(batch.Select(x => TableOperation.InsertOrReplace(x)));
await table.ExecuteBatchAsync(operation);
}
Microsoft.WindowsAzure.Storage.StorageException
- "批量中的元素99返回了意外的响应代码。" 仿真存储配置如下:
<add key="StorageConnectionString" value="UseDevelopmentStorage=true;" />
我担心虽然一切都在生产中正常工作(我们使用的是真正的Azure),但是它模拟存储的爆炸可能是我们做某些我们不应该做的事情的症状。是的。
我已经使用调试器运行它(在它爆炸之前)并验证了(根据API):
修改 看起来其中一个项目(#71/100)导致此失败。在结构上它与其他项目没有什么不同,但它确实有一些相当长的字符串属性 - 所以可能有一个未记录的限制/错误?
修改 以下Unicode UTF-16字节序列(在字符串属性上)足以导致异常:
r e n U+0019 space
114 0 101 0 110 0 25 0 115 0 32 0
(它的字节 25 0 115 0 ,即导致异常的unicode媒体结束U + 0019。
修改 失败实体的完整示例:
JSON:
{"SomeProperty":"ren\u0019s ","PartitionKey":"SomePartitionKey","RowKey":"SomeRowKey","Timestamp":"0001-01-01T00:00:00+00:00","ETag":null}
实体类:
public class TestEntity : TableEntity
{
public string SomeProperty { get; set; }
}
实体对象构造:
var entity = new TestEntity
{
SomeProperty = Encoding.Unicode.GetString(new byte[]
{114, 0, 101, 0, 110, 0, 25, 0, 115, 0, 32, 0}),
PartitionKey = "SomePartitionKey",
RowKey = "SomeRowKey"
};
答案 0 :(得分:0)
根据您的描述,我也可以重现您提到的问题。经过我测试后我发现了特殊的 Unicode字符&#39; END OF MEDIUM&#39; (U + 0019)似乎 Azure存储模拟器不支持。如果可以替换为其他unicode,请尝试使用另一个unicode代替它。
我们也可以将我们的feedback提供给Azure存储团队。