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 で解析エラーが発生することはありません。