У меня проблема при вызове Elastic из приложения веб-API .NET Core. Ниже приведены мои настройки, описание проблемы и отладочная информация.
Моя настройка
- Веб-API, созданный на основе .NET Core 2.1
- Библиотека классов, инкапсулирующая все мои
НЕСТА логика
- Консольное приложение тестирования Как веб-приложение, так и
Консоль тестирования использует хранилище библиотеки классов, чтобы
призыв к упругой.
- Я могу запустить службу веб-API либо локально, либо
локально в док-контейнере (Ubuntu)
- Elasticsearch работает локально, Shield устанавливается с AD и нативной областью.
- Все мои вещи используют заголовок run-as, а также консольное приложение и веб-API
используют ту же привязку и пользователь запуска.
Проблема:
Когда я выполняю запрос из моего консольного приложения, я получаю успех и результаты.
Когда я делаю то же самое через веб-API, я получаю следующую ошибку:
Неудачный низкоуровневый вызов по POST: / storeinventory / doc / _search
Странная часть: я создаю свой запрос с помощью метода построителя (используемого как для консоли, так и для веб-API), когда я беру ошибочный запрос, который я построил из вызова веб-API, и вставляю его в Kibana, он успешно выполняется.
Я тестировал curl локально, используя http://localhost:9200, а также имя хоста http://mysearch.example.com:9200 (которое настроено в моем файле хоста), оно работает на обоих.
Короче говоря, кажется, что выполнить запрос из моего веб-API не удается, даже если созданный запрос работает в Кибане. Тем не менее, он отлично работает из моего консольного приложения.
Я не уверен, чего мне не хватает, и с удовольствием расскажу обо всех идеях.
Отладочная информация ниже
Неудачный низкоуровневый вызов для POST: / storeinventory / doc / _search \ r \ n # Журнал аудита этого вызова API: \ r \ n - [1] BadRequest: Узел: http://elasticsearch.example.com:9200/ Взял: 00: 00: 01,3970177 \ г \ п #
OriginalException: System.Net.Http.HttpRequestException: Невозможно установить соединение, поскольку целевая машина активно отказала ему ---> System.Net.Sockets.SocketException:
Невозможно установить соединение, поскольку целевая машина активно отказывала в этом \ r \ n в System.Net.Http.ConnectHelper.ConnectAsync (Строковый хост, порт Int32, CancellationToken cancellationToken) \ r \ n
--- Конец внутренней трассировки стека исключений --- \ r \ n в System.Net.Http.ConnectHelper.ConnectAsync (Строковый хост, порт Int32, CancellationToken cancellationToken) \ r \ n в
System.Threading.Tasks.ValueTask 1.get_Result()\r\n at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at
System.Threading.Tasks.ValueTask
1.get_Result () \ r \ n в System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (ValueTask 1 creationTask)\r\n at System.Threading.Tasks.ValueTask
1.get_Result () \ r \ n
по адресу System.Net.Http.HttpConnectionPool.SendWithRetryAsync (запрос HttpRequestMessage, логическое значение doRequestAuth, CancellationToken cancellationToken) \ r \ n по адресу System.Net.Http.RedirectHandler.SendAsync (запрос HttpRequest
CancellationToken cancellationToken) \ r \ n в System.Net.Http.HttpClient.FinishSendAsyncBuffered (Task`1 sendTask, запрос HttpRequestMessage, CancellationTokenSource cts, логические disposeCts) \ r \ n в
Elasticsearch.Net.HttpConnection.Request [TResponse] (RequestData requestData) \ r \ n # Запрос: \ r \ n {\ "from \": 0, \ "size \": 10, \ "query \": {\ "query_string \": {\ "запрос \": \ "виски \"}}, \ "изюминкой \": {\ "поля \": {\ "ItemName \": {},
\ "itemlocation \": {}}}, \ "aggs \": {\ "source \": {\ "Terms \": {\ "field \": \ "_ index \"}}, \ "Avg_Quantity \" ": {\" avg \ ": {\" field \ ": \" amount \ "}}}} \ r \ n # Ответ: \ r \ n \ r \ n"
И вот как я звоню, используя ElasticLowLevelClient :
var searchResponse = lowlevelClient.Search<StringResponse>(_index, "doc", PostData.String(qJson));
А вот текст моего поста для запроса, созданного моим веб-API-приложением, которое работает в Кибане:
{
"from": 0,
"size": 10,
"query": {
"query_string": {
"query": "whiskey"
}
},
"highlight": {
"fields": {
"itemname": {},
"itemlocation": {}
}
},
"aggs": {
"source": {
"terms": {
"field": "_index"
}
},
"Avg_Quantity": {
"avg": {
"field": "quantity"
}
}
}
}