2017-03-08 48 views
0

我剛剛開始在本地計算機上使用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

謝謝您的支持。

回答

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的大小。