Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于“的例外情况”;分区路由信息“;在从DocumentDB读取文档时_C#_Asp.net_Azure Cosmosdb - Fatal编程技术网

C# 关于“的例外情况”;分区路由信息“;在从DocumentDB读取文档时

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

您是否见过此异常消息

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

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

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=(会话)(动态)文档;

这是程序集版本问题和异常,也显示了修复的可能解决方案

有三种可能的替代方法来修复相同的问题

  • 在VS2015->工具->选项-项目和解决方案->Web项目中更改项目设置,并在“使用64位版本的IIS…”上打勾
  • Yo可以更改IIS池设置并允许32位应用程序,如下图所示
  • 您还可以更改项目构建属性,并将目标平台设置为“任意CPU”

  • 我找到了解决办法。在问题中,使用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版本做类似查询的新方法是什么吗?