У нас возникла проблема на производстве, которую действительно сложно диагностировать. Симптом заключается в том, что при использовании SignalR один или несколько потоков на сервере периодически зависает. Когда это происходит, другие потоки, кажется, продолжают веселиться, если только один из них также не испытывает эту проблему.
Ошибка не регистрируется, но при создании дампа обнаруживаются потоки, испытывающие исключение ObjectDisposedException по адресу:
System.Net.Sockets.SafeCloseSocket.GetOrAllocateThreadPoolBoundHandle(Boolean)
System.Net.Sockets.Socket.GetOrAllocateThreadPoolBoundHandleSlow()
System.Net.Sockets.SocketAsyncEventArgs.DoOperationSendSingleBuffer(System.Net.Sockets.SafeCloseSocket)
System.Net.Sockets.Socket.SendAsync(System.Net.Sockets.SocketAsyncEventArgs)
Если мы отключим SignalR на стороне клиента, проблем не будет.
Мы сократили функциональность веб-сокета до такой степени, что мы создаем только пустой концентратор, и проблема все еще сохраняется.
Мы инициализируем SignalR с помощью:
services.AddSignalR();
app.UseSignalR(routes =>
{
routes.MapHub<LiveHub>("/live");
});
Содержимое LiveHub.cs:
public class LiveHub : Hub<ILiveHub>
{
public Task Ping()
{
return Clients.Caller.SendMessage("pong");
}
}
Мы работаем в AWS за Application Loadbalancer, но в настоящее время только на одном сервере.
Кто-нибудь еще имел эту проблему?