Como você pode ver nesta documentação da Microsoft sobre configurações de tempo limite e manutenção da atividade, você pode definir o DisconnectTimeout nas opções.
Exemplo:
protected void Application_Start(object sender, EventArgs e)
{
// Make long-polling connections wait a maximum of 110 seconds for a
// response. When that time expires, trigger a timeout command and
// make the client reconnect.
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);
// Wait a maximum of 30 seconds after a transport connection is lost
// before raising the Disconnected event to terminate the SignalR connection.
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
// For transports other than long polling, send a keepalive packet every
// 10 seconds.
// This value must be no more than 1/3 of the DisconnectTimeout value.
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
RouteTable.Routes.MapHubs();
}
Edit : Como você deseja eliminar a conexão do cliente, não importa o quê, você está falando sobre um CancellationToken
comportamento, mas infelizmente isso ainda não é suportado no SignalR, como você pode ver aqui e aqui , a equipe quer fazer isso, SignalR
mas ainda há nenhuma notícia sobre isso.
Leia este documento da microsoft sobre o evento de duração do Hub. Você pode alterar os valores padrão para essas configurações, defini-los
Application_Start
em seuGlobal.asax
arquivo. Mas desta forma você não pode controlar totalmente o lado do cliente. Então você usa asetTimeout
função javascript e passa o horário do servidor quando um novo usuário connect.it pode serGlobalHost.Configuration.DisconnectTimeout
ou quando você quiser. Dou um exemplo completo com o projeto de demonstração. Na verdade, eu uso essa lógica em um sistema de emissão de bilhetes muito grande para guardar bilhetes em tempo real. (leia todos os comentários em linha)Modelo:
Cubo:
TestView:
hub.js:
(Testado)
fonte
Você precisa definir um tempo limite. No servidor, você pode definir DisconnectTimeout, assim:
https://zzz.buzz/2016/05/11/setting-timeout-for-signalr-for-easier-debugging/
fonte
Edição atualizada, consulte a opção 3 abaixo.Todos os outros estão contando com o tempo limite, eu postei uma desconexão forçada.
Se você estiver tentando uma desconexão forçada - poderá obter a lista dos usuários conectados e ligar para o
ForceLogOut
função no lado do servidor. Vi isso em algum lugar no projeto de código, espero que ajude. Se você quiser forçar o logout / matar apenas alguns dos usuários, faça um loop e elimine somente essa conexão.Lado do servidor
Lado do Cliente
Atualizado com a opção 3 : com base em solicitação ... as outras soluções dependem do tempo limite, mas você também pode forçá-lo diretamente , descartando a conexão por conta própria
Abri o código SignalR e, dentro, você pode ver
DisposeAndRemoveAsync
o encerramento real de uma conexão de cliente.1- Você pode modificar ou ligar
DisposeAndRemoveAsync
com sua conexão.2- Então ligue
RemoveConnection(connection.ConnectionId);
Cuidado, limpe-se quando isso for feito.
fonte
$.connection.hub.stop()
função-gera um erro porque a solicitação não foi totalmente enviada ao back-end. Portanto, estou procurando uma solução que mate a conexão ativa no momento, mesmo que exista uma solicitação em execução.