Temos um gateway de aplicativo configurado na frente de nosso aplicativo Web em uma VM do Azure. Temos visto exceções ECONNRESET regulares que parecem ser geradas como resultado da investigação de integridade padrão. Posso ver a cada 30 segundos algumas solicitações para 127.0.0.1. Regularmente (mais de 20 ocorrências nas últimas 24 horas), uma dessas solicitações resulta em uma exceção ECONNRESET conforme a saída abaixo:
17:10:35 [Information] () "Request starting HTTP/1.1 GET http://127.0.0.1/ "
17:10:35 [Information] () {"Connection":["Keep-Alive"],"Host":["127.0.0.1"],"Max-Forwards":["10"]}
17:10:35 [Information] () Executing action method "HonestyBoxWeb.Controllers.HomeController.Index (HonestyBoxWeb)" with arguments (null) - ModelState is Valid
17:10:35 [Information] () Executing ViewResult, running view at path "/Views/Home/Index.cshtml".
17:10:35 [Information] () Executed action "HonestyBoxWeb.Controllers.HomeController.Index (HonestyBoxWeb)" in 2.8666ms
17:10:35 [Information] () "Request finished in 5.2758ms 200 text/html; charset=utf-8"
17:10:35 [Information] () Connection id ""0HLCE7PIFCIGH"" request processing ended abnormally.
System.IO.IOException: Error -104 ECONNRESET connection reset by peer ---> Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.UvException: Error -104 ECONNRESET connection reset by peer
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvOutputConsumer.<WriteOutputAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvConnection.<Start>d__26.MoveNext()
--- End of inner exception stack trace ---
at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.PipeCompletion.ThrowFailed()
at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.GetResult(ReadResult& result)
at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.IReadableBufferAwaiter.GetResult()
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Frame`1.<ProcessRequestsAsync>d__2.MoveNext()
Parece que a verificação de integridade está postando uma solicitação e redefinindo a conexão. Estou interpretando isso corretamente e há alguma maneira de resolver isso?
Responder1
Este foi um problema no servidor Kestrel e foi resolvido na versão 2.1 do dotnet core.
Referência:https://github.com/aspnet/KestrelHttpServer/issues/2540