![](/img/trans.png)
[英]Dotnet 5 on mac with IS4 returns SSL connection could not be established
[英]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
),情况并非如此。if (response != null && response.StatusCode == System.Net.HttpStatusCode.OK)
并使用其中一项内置功能。response.IsSuccessStatusCode
或response.EnsureSuccessStatusCode()
。 后者将在状态码不成功的情况下抛出异常。 另一件需要考虑的事情是 HTTP 调用有时会失败。 发生这种情况的原因有多种:网络超时、速率限制……。
也许您需要实现一些弹性。 例如,如果您在等待 1 秒后再次尝试相同的 HTTP 调用,它是否有效? 如果是这样,您可以使用Polly轻松实现这一点。
但是,我强烈建议您开始使用 .NET Core 的内置功能。 管理 HttpClient 有时会很棘手。 但是 .NET Core 可以通过使用IHttpClientFactory自动管理它。 您甚至可以使用一些扩展方法来实现弹性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.