【问题标题】:The SSL connection could not be established in dotNet Core无法在 dotNet Core 中建立 SSL 连接
【发布时间】:2021-02-01 20:59:46
【问题描述】:

在我的微服务中,我调用了第三方 api。

https://sms.partname.in/mspProducerM/sendSMS?queryParam

它工作正常,但有时我收到以下错误。

SmsClient ? - Connection refused - System.Net.Http.HttpRequestException: Connection refused
 ---> System.Net.Sockets.SocketException (111): Connection refused
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)

我无法找出根本原因。我应该绕过证书吗? 代码:-

private static HttpClient _httpClient = new HttpClient();
        public static async Task<string> SendAsync(Uri url)
        {
            try
            {
                string result = string.Empty;
                using (var response = await _httpClient.GetAsync(url).ConfigureAwait(false))
                {
                    if (response != null && response.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                    }
                }
                return result;
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error occurred while sending sms urlLink:{url}", ex);
                throw;
            }
        }

【问题讨论】:

  • 能否提供代码?
  • 当然。更新了问题。
  • 在浏览器中打开url可以用吗?
  • @MarkusMeyer 它正在工作,但我们每周都会收到此错误。
  • 我猜如果行为是零星的,那是服务提供商的问题。

标签: c# rest .net-core https


【解决方案1】:

您可以尝试一些小的调整:

  • 您应该只创建一次 HttpClient。
    根据您的类的使用方式(您在哪里初始化 _httpClient),情况并非如此。
  • 我会更改您的 if 语句 if (response != null &amp;&amp; response.StatusCode == System.Net.HttpStatusCode.OK) 并使用其中一项内置功能。 使用response.IsSuccessStatusCoderesponse.EnsureSuccessStatusCode()。后者会在状态码不成功的情况下抛出异常。

另一件需要考虑的事情是,HTTP 调用有时会失败。发生这种情况的原因有多种:网络超时、速率限制……。
也许你需要实现一些弹性。例如,如果您在等待 1 秒后再次尝试相同的 HTTP 调用,它会起作用吗?如果是这样,您可以使用Polly 轻松实现此功能。

但是,我强烈建议您开始使用 .NET Core 的内置功能。有时管理 HttpClient 可能会很棘手。但是 .NET Core 可以通过使用 IHttpClientFactory 自动管理它。您甚至可以使用一些扩展方法来实现resilience

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多