C# 关于“的例外情况”;分区路由信息“;在从DocumentDB读取文档时
您是否见过此异常消息 在以下情况下,无法从查询中提取分区路由信息: 在32位进程中运行。以完成查询并避免此问题 例外,请确保主机进程为64位。可执行文件 在应用程序中,这可以通过取消选中“首选32位”来实现 选项,位于“项目属性”窗口的“生成”选项卡上。用于VSTest 基于测试项目,这可以通过选择测试->测试来完成 设置->默认处理器体系结构为X64,来自Visual Studio 测试菜单选项。对于本地部署的ASP.NET Web应用程序,此 可以通过选中“将64位版本的IIS Express用于 网站和项目”,在工具->选项->项目和 解决方案->网络项目 当我想从DocumentDB中读取文档时,会收到此异常消息。C#中检索文档的代码如下所示(未检查FeedOption):C# 关于“的例外情况”;分区路由信息“;在从DocumentDB读取文档时,c#,asp.net,azure-cosmosdb,C#,Asp.net,Azure Cosmosdb,您是否见过此异常消息 在以下情况下,无法从查询中提取分区路由信息: 在32位进程中运行。以完成查询并避免此问题 例外,请确保主机进程为64位。可执行文件 在应用程序中,这可以通过取消选中“首选32位”来实现 选项,位于“项目属性”窗口的“生成”选项卡上。用于VSTest 基于测试项目,这可以通过选择测试->测试来完成 设置->默认处理器体系结构为X64,来自Visual Studio 测试菜单选项。对于本地部署的ASP.NET Web应用程序,此 可以通过选中“将64位版本的IIS Expres
FeedOptions queryOptions=newfeedoptions{enableCrospartitionQuery=true};
var conv=db.Client.CreateDocumentQuery(
CreateDocumentCollectionUri(db.DatabaseName,db.CollectionName),查询选项
其中(f=>f.Id==“会话Id”);
//例外情况发生在这里
foreach(conv中的对话f)
{
Debug.Print(f.Name);
}
在上面,db
是一个存储库,我确信客户机
已经正确启动,因为我可以同时将文档插入DocumentDB
此外,您还可以看到对话模型:
公共课堂对话
{
[JsonProperty(PropertyName=“id”)]
公共字符串Id{get;set;}
公共字符串名称{get;set;}
[JsonProperty(“cid”)]
公共字符串CID{get;set;}//定义为分区键
}
我应该提到的是,DocumentDB中有一个文档Id为“conversationId”,下面的代码在这种情况下工作,但这不是解决方案,因为我也想查询名称
属性,而不仅仅是查询Id
:
Document doc=wait db.Client.readdocumentsync(
CreateDocumentUri(db.DatabaseName,db.CollectionName,“conversationId”),
新请求选项{PartitionKey=new PartitionKey(“PartitionKey”)};
会话conv=(会话)(动态)文档;
这是程序集版本问题和异常,也显示了修复的可能解决方案
有三种可能的替代方法来修复相同的问题
我找到了解决办法。在问题中,使用1.11版本的Microsoft.Azure.Document library。正如我在中发现的,
CreateDocumentQuery
已经过时,显然api已经更改。所以,当我降级到1.10版时,一切都正常。因此,我很高兴
因此,CreateDocumentQuery
在版本1.11中已经过时,您应该为每个集合定义一个partitionKey,其结果是您不能再使用CreateDocumentQuery
,除非您降级到1.10或更低版本。
另外,我认为这是这个版本中的一个bug,应该报告。不!这不是解决办法。它应该在Microsoft Azure上工作!没有IIS之类的访问权限!无论如何,我以前在我的机器上做过,但是更改此配置会在编译时产生其他错误,例如我的代码中的某些DLL冲突,我的代码可能会有一些编译错误。请在document client的1.11.1版本上工作,并激活第一个映像选项,然后工作。您创建了一个文档,与本教程通常所做的一样。从现在起,必须对docuementos的分区提出一个问题,我不太清楚这一点。非常感谢。嗨,OmG,API DocumentClient.CreateDocumentQuery方法(Uri, 饲料选择, 对象)不久前被弃用,在1.10.0中也被弃用。此外,当我们将一个API标记为已弃用时,它仍能按预期工作,这只是一个尽快摆脱此API的指示。所以我认为问题是不同的。最有可能的是,ServiceInterop.dll开始在1.11.0中为您正在使用的API加载,而不是在1.10.0中加载。我们要求您在64位主机进程中运行应用程序,因此您的主机进程是32位的,因此您会遇到此错误。为了解决此问题,请告诉我您使用DocumentDB库的项目/解决方案的布局。每个项目的项目类型是什么?您在哪个项目中引用DocumentDB客户端库?我们应该能够在1.11.0本身上解决这个问题,您不必回到1.10.0。让我知道。在您粘贴的示例中,您正在使用以下API:DocumentClient.CreateDocumentQuery方法(Uri, FeedOptions),未标记为已弃用。它将分区键作为一个对象,这不是您拥有的第一个示例的情况。@RajeshNagpal,正如我所说的,通过当前的解决方案(如我所提到的),它已经解决了。我再也没有问题了!谢谢。@OmG我也遇到了同样的问题,通过将版本降级到1.10解决了这个问题。你知道用1.11版本做类似查询的新方法是什么吗?