gpt4 book ai didi

c# - Elastic Search .NET Core 对 Post 的低级别调用不成功

转载 作者:行者123 更新时间:2023-11-30 12:55:01 26 4
gpt4 key购买 nike

我在从 .NET Core Web API 应用程序调用 Elastic 时遇到问题。以下是我的设置、问题描述和调试信息。

我的设置

  • 使用 .NET Core 2.1 构建的 Web API
  • 封装了我所有的类库嵌套逻辑
  • 测试控制台应用程序 Web 应用程序和测试控制台正在使用类库的存储库来制作调用弹性。
  • 我可以在本地或在本地的 docker 容器中 (Ubuntu)
  • Elasticsearch 在本地运行,Shield 安装有 AD 和 native 领域。
  • 我所有的东西都在使用 run-as header 以及控制台应用程序和 Web API正在使用相同的绑定(bind)和运行用户。

问题:当我从我的控制台应用程序执行查询时,我获得了成功和结果。
当我通过 Web API 执行相同操作时,出现以下错误:

Unsuccessful low level call on POST: /storeinventory/doc/_search

奇怪的是,我正在使用构建器方法(同时用于控制台和 Web API)构建我的查询,当我将我从 Web API 调用构建的失败查询粘贴到 Kibana 时,它成功了。

我已经使用 http://localhost:9200 在本地对 curl 进行了测试以及主机名 http://mysearch.example.com:9200 (在我的主机文件中配置)它适用于两者。

简而言之,从我的 Web API 进行查询似乎失败了,即使它构建的查询在 Kibana 中有效。但是,它在我的控制台应用程序中完美运行。

我不确定我错过了什么,并且会很乐意接受所有想法。

调试信息如下

Unsuccessful low level call on POST: /storeinventory/doc/_search\r\n# Audit trail of this API call:\r\n - [1] BadRequest: Node: http://elasticsearch.example.com:9200/ Took: 00:00:01.3970177\r\n# OriginalException: System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it\r\n at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\r\n
--- End of inner exception stack trace ---\r\n at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\r\n at System.Threading.Tasks.ValueTask1.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 at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask1 creationTask)\r\n at System.Threading.Tasks.ValueTask1.get_Result()\r\n
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)\r\n at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)\r\n at Elasticsearch.Net.HttpConnection.Request[TResponse](RequestData requestData)\r\n# Request:\r\n{\"from\":0,\"size\":10,\"query\":{\"query_string\":{\"query\":\"whiskey\"}},\"highlight\":{\"fields\":{\"itemname\":{}, \"itemlocation\":{}}},\"aggs\":{\"source\": {\"terms\": { \"field\": \"_index\"}},\"Avg_Quantity\": {\"avg\": { \"field\": \"quantity\"}}}}\r\n# Response:\r\n\r\n"

下面是我使用 ElasticLowLevelClient 进行调用的方式:

var searchResponse = lowlevelClient.Search<StringResponse>(_index, "doc", PostData.String(qJson));

这是我的查询帖子正文,由我在 Kibana 中运行的 Web API 应用程序构建:

{
"from": 0,
"size": 10,
"query": {
"query_string": {
"query": "whiskey"
}
},
"highlight": {
"fields": {
"itemname": {},
"itemlocation": {}
}
},
"aggs": {
"source": {
"terms": {
"field": "_index"
}
},
"Avg_Quantity": {
"avg": {
"field": "quantity"
}
}
}
}

最佳答案

好的,所以我找到了解决方法。

我的节点 url 是 http://localhost:9200 .这适用于控制台应用程序,但不适用于 webapi 项目。我改成了http://127.0.0.1:9200它奏效了。

作为记录(以防将来有人看到这个并且说,“但这不能解决我的问题!”- 启动 fiddler(或类似的应用程序)并观察流量。

那里的错误信息更具描述性。它告诉我错误是超时。这比 lowlevelclient 返回的错误更有帮助。

虽然这并不能解决我的问题,但它让我重新评估了情况,做了更多的谷歌搜索,发现有人提示 curl 将 localhost 转换为 IPv6 并改用 127.0.0.1。

关于c# - Elastic Search .NET Core 对 Post 的低级别调用不成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com