.NET Core 控制台应用程序 - SSL 连接错误
.NET Core Console Application - SSL connect error
上下文:
我有一个 n 层动态 ish 应用程序,目前在应用程序启动时构建其弹性索引。
虽然这可以让事情顺利进行,但我更希望有一个小型 CLI application/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
class 只能这样设置:
var uri = new Uri("https://localhost:9200");
services.AddSingleton(new ElasticClient(new ConnectionSettings(uri)));
...因此我没有在任何地方明确设置证书。 (到目前为止还不需要)
我最好的猜测是本机控制台应用程序缺少默认网络应用程序项目提供的某些东西,但至于什么,我不知道?
我已经根据错误日志设置了DisableDirectStreaming()
,但仍然没有改变。
我相信这可能是 .Net Core 中的一个错误,但我希望有人知道解决方法,或者暂时解决这个问题(其他让此代码成为我们应用程序的一部分的方法)启动?(这是我当前的工作解决方案))
目前有一个记录在案的问题,在 dotnet-core 项目的 CURL implementation/usage thereof/within OSX 上的 CURL 中......你明白了。它似乎已针对 1.1 进行了修复,但由于我使用的是 2.0(并且我已经尝试了对各种 github 线程的所有建议修复,但没有成功),我无法验证是否修复工作。
因此答案:
目前有一个 bug 阻止它在 OSX 上运行。
解决方法:
由于我的控制台应用程序/cli-tool 将 运行 在我们的应用程序网络/同一机器实例内部临时使用,理论上我不需要 HTTPS对于此实用程序,HTTP 应该足够了。 (一旦我做了那个改变,代码就可以正常工作了)
上下文:
我有一个 n 层动态 ish 应用程序,目前在应用程序启动时构建其弹性索引。
虽然这可以让事情顺利进行,但我更希望有一个小型 CLI application/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
class 只能这样设置:
var uri = new Uri("https://localhost:9200");
services.AddSingleton(new ElasticClient(new ConnectionSettings(uri)));
...因此我没有在任何地方明确设置证书。 (到目前为止还不需要)
我最好的猜测是本机控制台应用程序缺少默认网络应用程序项目提供的某些东西,但至于什么,我不知道?
我已经根据错误日志设置了DisableDirectStreaming()
,但仍然没有改变。
我相信这可能是 .Net Core 中的一个错误,但我希望有人知道解决方法,或者暂时解决这个问题(其他让此代码成为我们应用程序的一部分的方法)启动?(这是我当前的工作解决方案))
目前有一个记录在案的问题,在 dotnet-core 项目的 CURL implementation/usage thereof/within OSX 上的 CURL 中......你明白了。它似乎已针对 1.1 进行了修复,但由于我使用的是 2.0(并且我已经尝试了对各种 github 线程的所有建议修复,但没有成功),我无法验证是否修复工作。
因此答案:
目前有一个 bug 阻止它在 OSX 上运行。
解决方法:
由于我的控制台应用程序/cli-tool 将 运行 在我们的应用程序网络/同一机器实例内部临时使用,理论上我不需要 HTTPS对于此实用程序,HTTP 应该足够了。 (一旦我做了那个改变,代码就可以正常工作了)