1

Windows アプリのポータブル dll を使用して、SharePoint クライアント フレームワークを使用して検索を実行しようとしています。

Fiddler を使用すると、検索が実行され、メタデータと検索結果の JSON コレクションが返されることがわかります。これは、非ポータブル CSOM の結果と同じです。

CSOM が結果をデータ オブジェクトにマップしようとすると、次の例外が発生します。

タイプ '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 と非ポータブル CSOM の JSON は同じであるため、一方の CSOM で解析エラーが発生し、もう一方の CSOM で解析エラーが発生することはありません。

4

2 に答える 2

0

あなたの例外から私が特定できるのは、実行クエリ結果のキャストがここで問題を引き起こすということです。

以下のコードを使用して、実行クエリの結果をキャストします

ResultTable rtSharePointSearchResult = new ResultTable();
KeywordQuery query = new KeywordQuery(clientContext);
query.QueryText = "Keywords";
query.TrimDuplicates = false;
SearchExecutor searchExecutor = new SearchExecutor(clientContext);
ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(query);
clientContext.ExecuteQuery();
rtSharePointSearchResult = results.Value[0];
于 2015-07-10T11:07:27.130 に答える