我刚开始在本地计算机上使用Azure表存储(通过存储模拟器)。我将一些资源键存储在表存储中;但是,当我使用分区键,行键或两者查询表(甚至通过SQL Server Management Studio)时,没有得到任何结果。
查询表存储的代码如下:
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表存储会附加该字符?
SSMS screenshot from TableRow table
感谢您的支持。
答案 0 :(得分:0)
有谁知道问题可能是什么?
据我所知,如果表不存在,通常会发生Http 404错误。 我建议您首先检查您的表名是否存在。
如果它与附加的SOH字符有关,为什么Azure Table Storage会附加该字符呢?
根据了解Table Service Data Model文章,PartitionKey和RowKey属性的值中不允许使用以下字符: 控制字符从U + 0000到U + 001F,包括:
\ u0001是不允许的。
我还在我的计算机上编写了一个测试演示,我们无法在分区键和行键中插入控制字符。
我的存储模拟器版本是4.6,而azure存储包版本是8.0.1,我想你插入控制字符的原因是你的模拟器版本和软件包版本。
我建议您安装有关模拟器的最新版本,然后重试。
下载链接:https://azure.microsoft.com/en-us/downloads/
此外,如果表属性类型是Edm.String,我建议您确保插入的值是UFT-16编码的值。
Edm.String:UTF-16编码的值。字符串值可能最多 64 KB大小。