簡體   English   中英

無法在 dotNet Core 中建立 SSL 連接

[英]The SSL connection could not be established in dotNet Core

在我的微服務中,我正在調用第三方 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;
            }
        }

您可以嘗試一些小的調整:

  • 您應該只創建一次 HttpClient。
    根據您的類的使用方式(您初始化_httpClient ),情況並非如此。
  • 我會更改您的 if 語句if (response != null && response.StatusCode == System.Net.HttpStatusCode.OK)並使用其中一項內置功能。
    使用response.IsSuccessStatusCoderesponse.EnsureSuccessStatusCode() 后者將在狀態碼不成功的情況下拋出異常。

另一件需要考慮的事情是 HTTP 調用有時會失敗。 發生這種情況的原因有多種:網絡超時、速率限制……。
也許您需要實現一些彈性。 例如,如果您在等待 1 秒后再次嘗試相同的 HTTP 調用,它是否有效? 如果是這樣,您可以使用Polly輕松實現這一點。

但是,我強烈建議您開始使用 .NET Core 的內置功能。 管理 HttpClient 有時會很棘手。 但是 .NET Core 可以通過使用IHttpClientFactory自動管理它。 您甚至可以使用一些擴展方法來實現彈性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM