Azure表存储模拟器将SOH字符附加到分区和行键
我刚刚开始在本地计算机上使用Azure表存储(通过存储模拟器)。我将一些资源键存储在表存储器中;但是,当我使用分区键,行键或两者查询表(即使通过SQL Server Management Studio)时,也无法返回结果。Azure表存储模拟器将SOH字符附加到分区和行键
查询表存储的代码如下:
public async Task<TEntity> GetItemAsync(string partitionKey, string rowKey)
{
var table = client.GetTableReference(TableName);
var retrieveOperation = TableOperation.Retrieve<TEntity>(partitionKey, rowKey);
var retrievedResult = await table.ExecuteAsync(retrieveOperation);
if (retrievedResult.Result != null)
{
return (TEntity)retrievedResult.Result;
}
else
{
Trace.TraceWarning("The entity could not be retrieved.");
return null;
}
}
当执行查询时,结果包含HTTP 404。
有没有人一个想法,这个问题可能是什么?如果它与正在追加的SOH字符有关,为什么Azure Table Storage会附加该字符?
SSMS screenshot from TableRow table
谢谢您的支持。
有没有人知道这个问题可能是什么?
据我所知,如果表不存在,通常会发生Http 404错误。 我建议你可以先检查你的表名是否存在。
如果它与正在追加的SOH字符有关,为什么Azure Table Storage会附加该字符?
据了解Table Service Data Model文章,以下字符不允许在用于PartitionKey和RowKey属性值: 控制字符从U + 0000到U + 001F,包括:
- 水平标签(\ t)的字符
- 换行(\ n)的字符
- 回车(\ r)的字符 距离U
- 控制字符+ 007F到U + 009F
\ u0001是不允许的。
我也在我的电脑上写了一个测试演示,我们无法在分区键和行键中插入控制字符。
我的存储模拟器版本是4.6,azure存储包版本是8.0.1,我猜你插入控制字符的原因是关于你的模拟器版本和软件包版本。
我建议你可以安装关于模拟器的最新版本,然后重试。
下载链接:https://azure.microsoft.com/en-us/downloads/
此外,如果表属性类型是Edm.String,我建议你可以确保你插入的值是一个UFT-16编码值。
Edm.String:UTF-16编码的值。字符串值可能高达 64 KB的大小。