当尝试使用 .NET SDK(3.0.4 和 4.0.0-preview)查看不存在的索引是否存在索引时,ExistsAsync
(以及Exists
和ExistsWithHttpMessagesAsync
)会引发以下异常。
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Azure.Search.IndexesOperations.<GetWithHttpMessagesAsync>d__12.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Azure.Search.ExistsHelper.<ExistsFromGetResponse>d__0`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Azure.Search.IndexesOperationsExtensions.<ExistsAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at InphizCore.MiddleLayer.Services.AzureSearch.Services.AzureSearchWriter`1.<AssertIndexExists>d__8.MoveNext() in C:\xxx\AzureSearchWriter.cs:line 109
使用邮递员的 http rest 可以正常工作并返回一条消息,指出索引不存在。
public async Task AssertIndexExists()
{
try
{
if (await searchServiceClient.Indexes.ExistsAsync(options.Value.IndexName) == false)
{
searchServiceClient.Indexes.Create(new Index(options.Value.IndexName, FieldBuilder.BuildForType<SearchableItemModel>(), corsOptions: new CorsOptions(new List<string> { "*" })));
}
}
catch (Exception e)
{
logger.LogError($"Azure Search Index '{options.Value.IndexName}' could not be created. ({e.Message})");
throw e;
}
}
如何以有意义的方式解决此问题?
更新:
这是客户端在单元测试中运行时的外观:
这是 AspNetCore MVC 的外观:
似乎搜索客户端无法创建和FirstMessageHandler
的实例。为什么不扔?HttpClient
HttpClientHandler