Ответ 1
В SignalR 2.1.0 появилась новая перегрузка OnDisconnected которая принимает bool, указывающий, был ли клиент отключен изящно или нет. Обоснование этих изменений объясняется в разделе "Ломающиеся изменения" в примечаниях к выпуску 2.1.0.
Ваш новый метод OnDisconnected может выглядеть примерно так:
public override Task OnDisconnected(bool stopCalled)
{
if (stopCalled)
{
// We know that Stop() was called on the client,
// and the connection shut down gracefully.
}
else
{
// This server hasn't heard from the client in the last ~35 seconds.
// If SignalR is behind a load balancer with scaleout configured,
// the client may still be connected to another SignalR server.
}
return base.OnDisconnected(stopCalled);
}
Старый метод OnDisconnected, который не принимает bool, не вызывается для изящных отключений, поэтому, если вы используете это событие, это может объяснить проблему, которую вы видите.
До 2.1.0 метод (только) OnDisconnected, который не принимал параметр, вызывался как для изящных, так и для изящных отключений. Поскольку это изменение в поведении вызвало несколько сообщений об ошибках, старая OnDisconnected перегрузка удаляется в выпуске SignalR next 2.1.1.
Это приведет к тому, что приложения, использующие старый метод OnDisconnected SignalR, не смогут скомпилироваться, если они созданы против SignalR 2.1.1. Хотя это не идеально, он, надеюсь, заставит разработчиков осознать это нарушение, чтобы у них была возможность соответствующим образом модифицировать свои приложения, прежде чем развертывать их.