2

将 .net Azure 搜索 SDK 升级到版本 9 后,我无法搜索。电话只是挂断:

    azureSearchIndexClient.Documents.Search(query, parameters);

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

4

2 回答 2

2

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

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

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

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

于 2019-05-16T06:01:13.887 回答
1

设置 SearchIndexClient.UseHttpGetForQueries = true,给了我一个错误返回工作,没有那个调用刚刚挂起。

于 2019-05-14T21:06:28.217 回答