将Azure Search SDK从v.5.0.3升级到v.9。搜索电话挂断

时间:2019-05-13 20:56:33

标签: azure-search azure-search-.net-sdk

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

    azureSearchIndexClient.Documents.Search(query, parameters);

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

2 个答案:

答案 0 :(得分: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请求的代码路径。因此,将UseHttpGetForQueries设置为true是有效的解决方法。但是,仅在解决方案可用之前,才应将其用作临时解决方案,尤其是在您的应用程序发送可能不适合URL查询字符串的非常大的查询时。

还请注意,仅当阻塞从异步方法返回的Task时才发生死锁。 SDK的同步方法在内部完成。建议在ASP.NET中进行实践,以使您的控制器方法以及它们调用的可能潜在执行I / O的所有方法异步,包括Azure Search SDK的方法。这样可以防止OS线程被阻塞,从而极大地提高了应用程序的可伸缩性。它还避免了由于缺少对ConfigureAwait(false)的调用而导致潜在死锁的问题。

答案 1 :(得分:1)

设置SearchIndexClient.UseHttpGetForQueries = true,给我一个错误,可以重新开始工作,而没有将调用挂起。