连接处理异常结束。 System.InvalidOperationException:句柄已被另一个套接字使用

问题描述 投票:0回答:1

在 linux (debian 11) 容器中运行我的 .net core 6 mvc 应用程序时,在对同一控制器操作进行某些连续调用后出现以下错误。此操作读取 http 响应正文并执行一些数据库操作,然后在响应中返回 json 对象。

完整的错误堆栈如下- 2024-04-12T17:13:16.217-07:00 [40m[1m[33mwarn[39m[22m[49m: Microsoft.AspNetCore.Server.Kestrel[0]] 2024-04-12T17:13:16.217-07:00 连接处理异常结束。 2024-04-12T17:13:16.217-07:00 System.InvalidOperationException:句柄已被另一个 Socket 使用。 2024-04-12T17:13:16.217-07:00 在 System.Net.Sockets.SocketAsyncEngine.TryRegisterCore(IntPtr socketHandle,SocketAsyncContext 上下文,错误和错误) 2024-04-12T17:13:16.217-07:00 在 System.Net.Sockets.SocketAsyncEngine.TryRegisterSocket(IntPtr socketHandle、SocketAsyncContext 上下文、SocketAsyncEngine& 引擎、Error& 错误) 2024-04-12T17:13:16.217-07:00 在 System.Net.Sockets.SocketAsyncContext.TryRegister(错误&错误) 2024-04-12T17:13:16.217-07:00在System.Net.Sockets.SocketAsyncContext.OperationQueue

1.StartAsyncOperation(SocketAsyncContext context, TOperation operation, Int32 observedSequenceNumber, CancellationToken cancellationToken) 2024-04-12T17:13:16.217-07:00   at System.Net.Sockets.SocketAsyncContext.ReceiveAsync(Memory
1缓冲区,SocketFlags标志,Int32&bytesReceived,Action
5 callback, CancellationToken cancellationToken) 2024-04-12T17:13:16.217-07:00   at System.Net.Sockets.SocketAsyncEventArgs.DoOperationReceive(SafeSocketHandle handle, CancellationToken cancellationToken) 2024-04-12T17:13:16.217-07:00   at System.Net.Sockets.Socket.ReceiveAsync(SocketAsyncEventArgs e, CancellationToken cancellationToken) 2024-04-12T17:13:16.217-07:00   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketReceiver.WaitForDataAsync(Socket socket) 2024-04-12T17:13:16.217-07:00   at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketConnection.DoReceive() 2024-04-12T17:13:16.217-07:00   at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result) 2024-04-12T17:13:16.217-07:00   at System.IO.Pipelines.Pipe.ReadAsync(CancellationToken token) 2024-04-12T17:13:16.217-07:00   at System.IO.Pipelines.Pipe.DefaultPipeReader.ReadAsync(CancellationToken cancellationToken) 2024-04-12T17:13:16.217-07:00   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.BeginRead(ValueTask
1&等待) 2024-04-12T17:13:16.217-07:00 在 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication
1 application) 2024-04-12T17:13:16.217-07:00   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequestsAsync[TContext](IHttpApplication
1 个应用程序)

我启用了调试级别日志以了解有关该问题的更多信息。这仅指出了这样的问题:经过几次尝试后,该端点调用的套接字连接并未正常关闭。

websocket asp.net-core-mvc aws-fargate docker-container linux-containers
1个回答
0
投票

在容器中启用调试级别日志后,发现kestrel在几次上传后没有正常关闭套接字连接。

为什么它没有正常关闭连接?因为我们通过代码创建和处置 SafeFileHandle(IntPtr.Zero) 实例。

这些博客文章帮助我找到了根本原因并解决了这个问题。

https://github.com/dotnet/runtime/issues/64305

https://github.com/fabian-blum/AspNetCore.Identity.LiteDB/pull/14

© www.soinside.com 2019 - 2024. All rights reserved.