Azure表存储模拟器将SOH字符附加到分区和行键

时间:2017-03-08 18:38:56

标签: c# http-status-code-404 emulation azure-table-storage

我刚开始在本地计算机上使用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

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

  

有谁知道问题可能是什么?

据我所知,如果表不存在,通常会发生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大小。