Возникла ошибка «System.Net.Sockets.SocketException: соединение отказано» в Linux с .Net Core 2.2 - PullRequest
0 голосов
/ 26 февраля 2019

Я сталкиваюсь с проблемой на Linux OS с .Net Core 2.2 при выполнении некоторых интеграционных тестов.Вот трассировка стека:

Failed mytest () Сообщение об ошибке: System.Net.WebException: Сбой после 5 повторных попыток ----> System.Net.WebException: Отказано в соединении Отказано в соединении ----> System.Net.Http.HttpRequestException: соединение отклонено ----> System.Net.Sockets.SocketException: соединение отклонено Трассировка стека: WebApiClient.cs: строка 56
WebApiClient.cs: строка 34 в PdsWebAppTests.ClientForTestPdsWebApp.Call(Метод метода, строковый URL, строковый requestContent, WebClientHeaders заголовки) в ClientForTestPdsWebApp.cs: строка 19 в IntegrationTests.IntegrationTests 1.mytest() in IntegrationTests.cs:line 44 --WebException at System.Net.HttpWebRequest.GetResponse() at WebApiClient.GetResponse(WebRequest webRequest) in WebApiClient.cs:line 117 at WebApiClient.ReceiveResponse(WebRequest webRequest) in WebApiClient.cs:line 97 CallWithRetries(Method method, String uriString, String requestContent, WebClientHeaders headers, Int32 retryCount) in WebApiClient.cs:line 46 --HttpRequestException at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask 1.get_Result () в System.Net.Http.HttpConnectionPool.CreateConnectionAsquestok5System.Threading.Tasks.ValueTask 1.get_Result() at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask 1 creationTask) в System.Threading.Tasks.ValueTask 1.get_Result()<br> at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)<br> at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task 1 sendTask, запрос HttpRequestMessage, CancellationTokenSource cts, Boolean disposeCts) в System.Net.HttpWebRequestSquest..HttpWebRequest.GetResponse ()--SocketException в System.Net.Http.ConnectHelper.ConnectAsync (строковый хост, порт Int32, CancellationToken cancellationToken)

Вот мой высокоуровневый поток кода:

public Response Call(Method method, string uriString, WebClientHeaders headers, string requestContent)
{
    var response = CallWithRetries(method, uriString, requestContent, headers, NumberOfTimesToRetry); //WebApiClient.cs:line 34
    return response;
}

private Response CallWithRetries(Method method, string uriString, string requestContent, WebClientHeaders headers, int retryCount)
{
    var lastException = new WebException();
    for (var retriesLeft = retryCount; retriesLeft > 0; --retriesLeft)
    {
        try
        {
            var webRequest = CreateRequest(method, uriString, requestContent, headers);
            var response = ReceiveResponse(webRequest);
            return response;
        }
        catch (WebException e)
        {
            lastException = e;
        }
        Thread.Sleep(RetryBackoffPeriod);
    }
    throw new WebException($"Failed after {retryCount} retries", lastException);
}

private Response ReceiveResponse(WebRequest webRequest)
{
    var json = "no json returned :-(";
    var webResponse = GetResponse(webRequest); //at WebApiClient.ReceiveResponse(WebRequest webRequest) in WebApiClient.cs:line 97
    if (webResponse == null) return null;
    using (webResponse)
    {
        var responseStream = webResponse.GetResponseStream();
        if (responseStream != null)
        {
            using (var y = new StreamReader(responseStream))
            {
                json = y.ReadToEnd();
            }
        }
        return new Response(((HttpWebResponse)webResponse).StatusCode, json);
    }
}

PS Этот тестовый пример хорошо работает в Windows.Также с Linux-машины я могу запускать свое веб-приложение и выполнять все операции, поэтому я думаю, что это просто WebRequest.GetResponse(), что вызывает исключение.

...