【问题标题】:C# azure table query returning 501 not implementedC# azure 表查询返回 501 未实现
【发布时间】:2016-01-20 05:00:17
【问题描述】:

我正在使用 Azure 表存储并且有一个表,我正在尝试查询行键以我感兴趣的某个值作为过滤依据的结束位置。这是我的代码:

var query = table.CreateQuery<DynamicTableEntity>().Where(o => o.PartitionKey == somePartitionKey && o.RowKey.EndsWith(string.Format("_{0}", aclId))).AsTableQuery();

然后我执行ExecuteQuerySegmentedAsync 但由于某种原因引发以下异常:

“Microsoft.WindowsAzure.Storage.StorageException”类型的第一次机会异常发生在 mscorlib.dll 中

附加信息:远程服务器返回错误:(501) Not Implemented。

有什么想法吗?我的代码/查询是否有问题导致它失败?无论如何,我真的需要一种有效的方法来检索分区中的所有记录,其中行键以某个值结尾。

【问题讨论】:

  • 您在 Azure 存储中使用什么 nuget 包和版本?
  • 您的存储帐户是在经典模式还是资源管理器模式下创建的?
  • 我看到您在查询中使用了 endwith。请注意,Azure 表不支持 endwith 运算符。

标签: c# azure azure-table-storage


【解决方案1】:

您收到此错误的原因是您尝试执行不受支持的操作。截至今天,Azure 表服务不支持 EndsWith 查询运算符。有关支持的 LINQ 运算符列表,请参阅此链接:https://msdn.microsoft.com/en-us/library/azure/dd135725.aspx

在您的场景中,您需要先在客户端下载实体,然后在这些实体上应用 EndsWith 运算符。

【讨论】:

  • 完美链接,谢谢!我对 Azure 很失望。在不支持此类查询之间 - 甚至包括简单的聚合,例如分区中所有实体的计数 - 似乎它们确实限制了性能/效率。有时我会质疑拥有便宜且“快速”的数据存储机制背后的目的,如果您甚至无法真正使用它。
【解决方案2】:

还请记住,Blob 存储只能访问通用的表服务。因此,如果您遇到这种情况并且您知道您已经设置了 blob 存储资源,那么它将无法正常工作。

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2021-04-23
    • 2014-09-28
    相关资源
    最近更新 更多