使用WebClient,偶尔但经常出现无法建立SSL连接的错误

问题描述

应用程序的这部分看起来很简单,但我一直遇到标题错误

    public static async Task getAndProcessReps(string DUNS,string apikey)
    {
        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12;

        string url = string.Format("https://api.sam.gov/entity-information/v2/entities?api_key={1}&ueiDUNS={0}&includeSections=repsAndCerts",DUNS,apikey);

        MemoryStream resp = new MemoryStream();
        string r = "";
        using (WebClient wc = new WebClient())
        {
            bool retry = true;
            int retryCt = 0;
            while (retry)
            {
                try
                {
                    //resp = new MemoryStream(await wc.DownloadDataTaskAsync(new Uri(url)));
                    r = await wc.DownloadStringTaskAsync(new Uri(url));
                    retry = false;
                }
                catch
                {
                    retryCt++;
                    System.Threading.Thread.Sleep(1000);
                    if (retryCt > 3)
                        retry = false;
                }
            }
        }

        reps.HomeSAM result = r.CreateFromJsonString<reps.HomeSAM>(); 

我偶尔但经常收到以下错误返回:

System.Net.Http.HttpRequestException: The SSL connection Could not be establi
shed,see inner exception.
 ---> System.Security.Authentication.AuthenticationException: Authentication fai
led,see inner exception.
 ---> System.ComponentModel.Win32Exception (0x80090321): The buffers supplied to
 a function was too small.
   --- End of inner exception stack trace ---
   at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdap
ter adapter,Boolean receiveFirst,Byte[] reAuthenticationData,Boolean isApm)
   at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean asyn
c,Stream stream,SslClientAuthenticationoptions sslOptions,CancellationToken c
ancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean asyn
c,CancellationToken c
ancellationToken)
   at System.Net.Http.httpconnectionPool.ConnectAsync(HttpRequestMessage request,Boolean async,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.CreateHttp11ConnectionAsync(HttpRequest
Message request,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.GethttpconnectionAsync(HttpRequestMessa
ge request,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.SendWithRetryAsync(HttpRequestMessage r
equest,Boolean doRequestAuth,CancellationToken cancellationToke
n)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request,Bool
ean async,CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage request,HttpC
ompletionoption completionoption,Boolean emitTelemetryStartStop,CancellationToken cancellationToken)
   at System.Net.HttpWebRequest.SendRequest(Boolean async)
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

我在 Windows Server 2012 R2 上使用 c# Core5。

在这里做错了什么吗?

我看到了一些关于 Windows 7 与 Windows 10 的讨论,特别是关于这部分错误

System.ComponentModel.Win32Exception (0x80090321): The buffers supplied to
     a function was too small.

这是我的服务器的问题,还是我的代码的问题或端点的问题?

我的错误可能是因为他们不接受 tls1.3?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)