Я сталкиваюсь с проблемой на 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()
, что вызывает исключение.