使用SharePoint CSOM(可移植)搜索会引发异常

时间:2015-04-05 06:46:40

标签: c# windows-store-apps sharepoint-2013 csom sharepoint-search

我正在尝试使用SharePoint客户端框架来执行搜索,使用Windows应用程序中的便携式dll。

使用Fiddler我可以看到我的搜索已执行,并返回元数据和搜索结果的JSON集合。这与非便携式CSOM的结果相同。

当CSOM尝试将结果映射到它的数据对象时,我得到以下异常:

  

无法转换类型&System; System.Collections.Generic.Dictionary`2 [System.String,System.Object]'键入' Microsoft.SharePoint.Client.Search.Query.ResultTableCollection'。

此异常发生在CSOM(便携式)中。非可移植的CSOM毫无例外地运行,并返回预期的结果。

我正在运行以获取此异常的代码是:

var query = new KeywordQuery(ctx);
query.QueryText = "something";
var executor = new SearchExecutor(ctx);
var results = executor.ExecuteQuery(query);
await ctx.ExecuteQueryAsync();

在上面,ctx是一个已经过身份验证的ClientContext。其他请求(例如获取特定列表)按预期工作。

我在c:\ Program Files \ Common Files \ microsoft shared \ Web Server Extensions \ 16 \ ISAPI中引用了以下dll:

  • Microsoft.SharePoint.Client.Portable.dll
  • Microsoft.SharePoint.Client.Runtime.Portable.dll
  • Microsoft.SharePoint.Client.Runtime.WindowsStore.dll
  • Microsoft.SharePoint.Client.Search.Portable.dll

我的问题是。

如何解决这个问题,以便我可以使用CSOM从Windows应用商店应用运行搜索查询?

更新: 在验证ClientContext之后我添加了以下内容:

ctx.ExecutingWebRequest += (s, e) =>
    e.WebRequest.Headers["Accept-Encoding"] = "gzip, deflate";

这解决了眼前的问题,但引入了一个新问题。我现在得到一个System.FormatException:

  

格式不正确的JSON流。

由于便携式和非便携式CSOM中的JSON是相同的,因此在一个CSOM中不应该存在解析错误,而在另一个CSOM中不应该存在解析错误。

2 个答案:

答案 0 :(得分:0)

我可以从您的异常中识别出,执行查询结果的转换会在此处产生问题。

使用以下代码转换执行查询结果

base_loader = jinja2.FileSystemLoader('/templates/')
includes_loader = jinja2.FileSystemLoader('/includes/')

base_env = jinja2.Environment(loader=base_loader)
includes_env = jinja2.Environment(loader=includes_loader)

template = env.get_template('base.html')
template.env = includes_env

答案 1 :(得分:0)

请注意,第一篇文章使用ctx.ExecuteQueryAsync,但“answer”使用ctx.ExecuteQuery。

该漏洞存在于便携式类库中(第一篇文章使用的),但这适用于非可移植版本(第二篇文章)。

干杯, 保罗