.NET Core Console应用程序 - SSL连接错误

时间:2017-10-30 12:44:55

标签: .net-core nest asp.net-core-2.0

上下文

我有一个n层动态应用程序,目前在应用程序启动时构建其弹性索引。

虽然这可以让事情顺利进行,但我更喜欢使用一个小的CLI应用程序/ util,以后可以在某些脚本中重复使用,或者如果我需要执行某些操作,可以运行ad-hoc,创建一个新实例,播种模拟数据等。

问题:

当我使用与我的dotnetcore网络应用启动时完全相同的代码时,在我的控制台应用中,我遇到以下问题:

Invalid NEST response built from a unsuccessful low level call on PUT: /jobs-ng
# Audit trail of this API call:
 - [1] BadRequest: Node: https://localhost:9200/ Took: 00:00:01.3948230
# OriginalException: System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.CurlException: SSL connect error
   at System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error)
   at System.Net.Http.CurlHandler.MultiAgent.FinishRequest(StrongToWeakReference`1 easyWrapper, CURLcode messageResult)
   --- End of inner exception stack trace ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Elasticsearch.Net.HttpConnection.Request[TReturn](RequestData requestData) in C:\Users\russ\source\elasticsearch-net-5.x\src\Elasticsearch.Net\Connection\HttpConnection-CoreFx.cs:line 78
# Request:
<Request stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.>
# Response:
<Response stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.>

其他信息:

目前我的ElasticClient课程设置如下:

 var uri = new Uri("https://localhost:9200");
 services.AddSingleton(new ElasticClient(new ConnectionSettings(uri)));

...因此我没有在任何地方明确设置证书。 (到目前为止还没有被要求)

我最好的猜测是原生控制台应用程序缺少默认Web应用程序项目提供的内容,但至于什么,我不知道?

我根据错误日志设置了DisableDirectStreaming(),但仍然没有变化。

我相信这可能是.Net Core中的一个错误,但是我希望有人知道一个解决方法,或暂时解决这个问题(其他让这些代码成为我们应用程序的一部分)启动?(这是我目前的工作解决方案))

1 个答案:

答案 0 :(得分:2)

目前有一个记录在案的问题,在dotnet-core项目的CURL实现/使用/在OSX上的CURL中......你明白了。它似乎已经修复了1.1,但是因为我在2.0(并且我已经尝试了各种github线程上的所有建议修复,但没有成功),我无法验证该修复是否有效。 / p>

答案如下:

目前有一个bug阻止它在OSX上工作。

解决方法:

由于我的控制台app / cli-tool将在我们的应用程序网络/同一个机器实例内部临时运行,理论上我不需要 HTTPS 来实现此实用程序, HTTP < / strong>应该足够了。 (一旦我做了这个改变,代码就可以全面运行了)