Обновление Azure Search SDK с версии 5.0.0 до версии 9.Поиск звонка зависает - PullRequest
2 голосов
/ 13 мая 2019

После обновления .net Azure Search SDK до версии 9 я не могу выполнить поиск. Звонок только висит:

    azureSearchIndexClient.Documents.Search(query, parameters);

Я не получаю сообщение об ошибке, все работало на 5.0.3, я все еще могу создавать, заполнять и удалять индексы в версии 9. Без ответа мне не на что идти ...

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Это ошибка в версии 9.0.0 SDK, отслеживаемая здесь: https://github.com/Azure/azure-sdk-for-net/issues/6254 С тех пор она была исправлена ​​в версии 9.0.1, теперь доступна для загрузки на NuGet.Версия 8.0.0-preview все еще подвержена этой ошибке на момент написания этой статьи.

Причиной является отсутствие вызова ConfigureAwait(false), что приводит к тупику при вызове SDK в контекстеASP.NET classic app.

Эта ошибка влияет только на путь кода, используемый для отправки POST-запросов.Вот почему установка UseHttpGetForQueries на true - эффективный обходной путь.Однако это следует использовать только как временное решение, пока исправление не станет доступно, особенно если ваше приложение отправляет очень большие запросы, которые могут не уместиться в строке запроса URL.

Также обратите внимание, что взаимоблокировка возникает только при блокировкеЗадача, возвращаемая из асинхронного метода.Синхронные методы SDK делают это внутренне.В ASP.NET рекомендуется практиковать асинхронность методов контроллера, а также всех вызываемых ими методов, которые могут выполнять ввод / вывод, включая методы пакета поиска Azure Search.Это предотвращает блокировку потоков ОС, что значительно увеличивает масштабируемость вашего приложения.Это также позволяет избежать проблем с возможной тупиковой ситуацией из-за пропущенных вызовов на ConfigureAwait(false).

1 голос
/ 15 мая 2019

Установка SearchIndexClient.UseHttpGetForQueries = true вернула мне ошибку, из-за которой звонок просто завис.

...