Azure 表存储 - 501 未实现

Posted

技术标签:

【中文标题】Azure 表存储 - 501 未实现【英文标题】:Azure Table Storage - 501 Not Implemented 【发布时间】:2021-08-15 12:51:55 【问题描述】:

我正在按照本指南使用 Azure Tables:https://docs.microsoft.com/en-us/dotnet/api/overview/azure/data.tables-readme-pre,它使用 Azure.Data.Tables NuGet 包。

我可以成功保存一行并在 Azure 门户的存储资源管理器中看到它,但是在尝试执行简单查询时,我又回来了:

Unhandled exception. Azure.RequestFailedException: Service request failed.
Status: 501 (Not Implemented)

Content:
"odata.error":"code":"NotImplemented","message":"lang":"en-US","value":"The requested operation is not implemented on the specified resource.\nRequestId:0137da3a-f002-0031-19
d6-5234ab000000\nTime:2021-05-27T08:59:39.8919922Z"

我的查询代码是:

    var entities = _tableClient
        .Query<TableEntity>(t => t.PartitionKey == PartitionKey)
        .ToList();

【问题讨论】:

你能不试试 .ToList(); ? 同样的事情,但是当我迭代时发生错误 TableQuery query = new TableQuery().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey));这个? 这些类型来自什么库/包? 也许 SDK 还没有完全发挥作用,因为据说它仍处于测试阶段。使用var query = table.CreateQuery&lt;TableEntity&gt;().Where(x =&gt; x.PartitionKey == "test").ToList();Microsoft.Azure.Cosmos.Table 包执行相同操作似乎对我来说没有问题。还没试过 beta 包。 【参考方案1】:

我也遇到了这个确切的问题,虽然它似乎没有在任何地方记录,但以下内容对我有用:

var token = new DefaultAzureCredential();
var tableServiceClient = new TableServiceClient(new Uri($"https://storageAccountName.table.core.windows.net/"), token);
var client = tableServiceClient.GetTableClient(tableName);
var entities = client.Query<MyEntity>(filter: $"PartitionKey eq 'partKey'");

我不太明白为什么直接创建TableClient:

new TableClient(new Uri($"https://storageAccountName.table.core.windows.net/tableName"), tableName, token);

不起作用,但首先通过 TableServiceClient 对我有用。试试看吧。

【讨论】:

【参考方案2】:

当我像这样创建客户端时,我在 java SDK 中遇到了这个问题:

new TableClientBuilder()   
        .endpoint("https://storageAccountName.table.core.windows.net/tableName")
                .sasToken(sas)
                .tableName(tableName)
                .buildClient()

所以我做错了将表名作为端点的一部分并删除它停止了异常。

【讨论】:

以上是关于Azure 表存储 - 501 未实现的主要内容,如果未能解决你的问题,请参考以下文章

Azure Bot 脚本未保存

如何降低 Azure 表存储延迟

将 Azure 表存储的重试策略与 Azure Functions 结合使用

如何在 Microsoft azure 存储资源管理器工具中删除表列名称?

查找对 Azure 存储表的删除实体调用

执行更新元素时​​是不是需要考虑 Azure 表存储中的 Etag?