Периодическая ошибка: запрос был прерван: не удалось создать безопасный канал SSL / TLS - PullRequest
0 голосов
/ 06 августа 2020

Мы используем клиент, написанный на C#. net 4.5 Консольное приложение для использования веб-сервиса (наш веб-сервис поддерживает TLS и не поддерживает SSL). В 99 процентах случаев он работает без проблем, но иногда мы получаем сообщение об ошибке «Запрос был прерван: не удалось создать безопасный канал SSL / TLS» случайным образом. Через пару миллисекунд он также вернется в нормальное состояние. Операционная система клиентской машины: Windows server 2012 r2. Это же приложение работает без проблем с Windows 10.

static async Task<string> CheckStudentStatus(string studentID)
        {
            string studentstat = "error";
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            try
            {

                using (var httpClient = new HttpClient())
                {
                    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://EndpointURL" + studentID))
                    {

                        request.Headers.TryAddWithoutValidation("Accept", "application/json");
                        request.Headers.TryAddWithoutValidation("Connection", "Keep-Alive");
                        request.Headers.TryAddWithoutValidation("Authorization", "Bearer AuthenticationToken");

                        var response = await httpClient.SendAsync(request);
                        var responseJson = System.Threading.Tasks.Task.Run(async () => await response.Content.ReadAsStringAsync())
                   .GetAwaiter().GetResult();
                        Console.WriteLine(responseJson.ToString());
                        if ((int)response.StatusCode == 200)
                        {
                            JObject joResponse = JObject.Parse(responseJson);
                            var studentStatus = joResponse.GetValue("StudentStatus");
                            string Stat = studentStatus?.ToString();
                            if (!string.IsNullOrWhiteSpace((Stat)))
                            {
                                studentstat = Stat;
                            }
                        }
                    }
                }
            }
            catch (HttpRequestException ex)
            {
                Console.WriteLine("Error message: " + ex.Message);
                Console.WriteLine("Stack Trace " + ex.StackTrace);
                Console.WriteLine("Inner exception " + ex.InnerException.Message);
            }
            return studentstat;
        }

...