有关"分区路由信息的例外情况"从DocumentDB

时间:2016-12-12 15:22:22

标签: c# asp.net azure-cosmosdb

您是否见过这条异常消息?

  

分区路由信息无法从查询中提取出来   以32位进程运行。要完成您的查询并避免这种情况   例外,确保您的主机进程是64位。对于可执行文件   应用程序,这可以通过取消选中"首选32位"   项目属性窗口中的选项,在“构建”选项卡上。对于VSTest   基于测试项目,可以通过选择Test-> Test来完成   设置 - >默认处理器体系结构为X64,来自Visual Studio   测试菜单选项。对于本地部署的ASP.NET Web应用程序,这个   可以通过检查"使用64位版本的IIS Express来完成   网站和项目",在工具 - >选项 - >项目和   解决方案 - > Web项目。

当我想从DocumentDB读取文档时,我收到此异常消息。 C#中用于检索文档的代码如下(没有检查FeedOption):

FeedOptions queryOptions = new FeedOptions { EnableCrossPartitionQuery = true };
var conv = db.Client.CreateDocumentQuery<Model.Conversation>(
UriFactory.CreateDocumentCollectionUri(db.DatabaseName, db.CollectionName), queryOptions)
.Where(f => f.Id == "conversationId");

// the exception happens here
foreach(Conversation f in conv)
{
    Debug.Print(f.Name);
}

在上面,db是一个存储库,我确信Client已经正确启动,因为我可以同时将文档插入DocumentDB。

此外,您还可以看到对话模型:

public class Conversation
{
    [JsonProperty(PropertyName = "id")]
    public string Id { get; set; }
    public string Name { get; set; }
    [JsonProperty("cid")]
    public string CID { get; set; } // defined as a partition key
}

我应该提一下DocumentDB中有一个Id == "conversationId"的文档,下面的代码在这种情况下工作,但它不是我想在Name属性上查询的解决方案,不仅仅是Id

Document doc = await db.Client.ReadDocumentAsync(
         UriFactory.CreateDocumentUri(db.DatabaseName, db.CollectionName, "conversationId"),
         new RequestOptions { PartitionKey = new PartitionKey("partitionKey") });
Conversation conv = (Conversation)(dynamic)doc;

2 个答案:

答案 0 :(得分:2)

汇编版本问题和例外也显示了修复的可能解决方案。

有三种可能的替代方法用于修复它。

  1. 在VS2015中更改项目设置 - &gt;工具 - &gt;选项 - 项目和解决方案 - &gt; Web项目并标记“使用64位版本的IIS ...”
  2. enter image description here

    1. Yo可以更改IIS池设置并允许32位应用程序,如下图所示。
    2. enter image description here

      1. 您还可以更改项目构建属性并将目标平台设置为“任何CPU”。
      2. enter image description here

答案 1 :(得分:2)

我找到了解决方案。在问题中,使用的是1.11版本的Microsoft.Azure.Document库。正如我在this link中发现的那样,CreateDocumentQuery已被淘汰,显然api已被更改。因此,当我降级到版本1.10时,每个人都可以正常工作。因此,我很高兴!

因此,版本1.11中已CreateDocumentQuery已废弃,您应为每个集合定义一个partitionKey,其结果是您不能再使用CreateDocumentQuery,除非您降级为1.10或更低版本。 此外,我认为这是该版本中的一个错误,应该报告。