将 Azure 搜索 SDK 从 v.5.0.3 升级到 v.9。搜索呼叫挂起

Upgrading Azure Search SDK from v.5.0.3 to v.9. Search call hangs

将.net Azure Search SDK 升级到版本9 后,无法搜索。通话挂断:

    azureSearchIndexClient.Documents.Search(query, parameters);

我没有收到错误,一切都在 5.0.3 上运行,我仍然可以在版本 9 中创建、填充和删除索引。没有任何响应,我没有什么可继续的...

设置 SearchIndexClient.UseHttpGetForQueries = true,让我重新开始工作时出现错误,否则呼叫就会挂起。

这是 SDK 9.0.0 版中的错误,在此处跟踪:https://github.com/Azure/azure-sdk-for-net/issues/6254此问题已在 9.0.1 版中修复,现在可在 NuGet 上下载。截至撰写本文时,8.0.0 预览版仍受此错误影响。

原因是缺少对 ConfigureAwait(false) 的调用,这会导致在 ASP.NET 经典应用的上下文中调用 SDK 时出现死锁。

该错误仅影响用于发送 POST 请求的代码路径。这就是为什么将 UseHttpGetForQueries 设置为 true 是一种有效的解决方法。但是,在修复程序可用之前,这只能用作临时解决方案,尤其是当您的应用程序发送可能不适合 URL 查询字符串的非常大的查询时。

另请注意,死锁仅在阻塞异步方法返回的任务时发生。 SDK 的同步方法在内部执行此操作。 ASP.NET 中推荐的做法是使控制器方法异步,以及它们调用的所有可能执行 I/O 的方法,包括 Azure 搜索 SDK 的方法。这可以防止 OS 个线程阻塞,从而大大提高应用程序的可扩展性。它还避免了由于缺少对 ConfigureAwait(false).

的调用而导致的潜在死锁问题