1

Я пытаюсь использовать инфраструктуру клиента SharePoint для выполнения поиска, используя переносимую dll из приложения Windows.Поиск с помощью SharePoint CSOM (переносимый) генерирует исключение

Использование Fiddler Я вижу, что мой поиск выполнен и возвращает коллекцию метаданных и результаты поиска JSON. Это идентично результату не-портативного CSOM.

Когда CSOM пытается отобразить результат это объекты данных, я получаю следующее исключение:

Невозможно привести объект типа «System.Collections.Generic.Dictionary`2 [System.String, система. Object] ', чтобы напечатать «Microsoft.SharePoint.Client.Search.Query.ResultTableCollection».

Это исключение встречается внутри CSOM (переносной). Non-portable CSOM работает без исключения и возвращает ожидаемый результат.

код Я бегу, чтобы получить это исключение:

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

В приведенном выше CTX является ClientContext, который уже прошел проверку подлинности. Другие запросы, такие как получение определенного списка, работают так, как ожидалось.

Я ссылающийся на следующие библиотеки DLL из C: \ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 16 \ ISAPI:

  • 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 Store?

UPDATE: Я добавил следующее после аутентификации ClientContext:

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

Это решило непосредственную проблему, но ввел новую. Я получаю System.FormatException:

Не хорошо отформатированный поток JSON.

Поскольку JSON из портативного и непереносного CSOM одинаковый, не должно быть ошибки синтаксического анализа в одном CSOM, а не другом.

ответ

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]; 
0

Обратите внимание, что первый пост использует ctx.ExecuteQueryAsync но «ответ» использует ctx.ExecuteQuery.

Ошибка в переносимой библиотеке классов (что используется в первом сообщении), но это работает в непереносной версии (второе сообщение).

Cheers, Paul

Смежные вопросы