2016-04-06 16 views
3

Wir haben einen Server SignalR für den Selbsthost erstellt und unsere WPF Desktop-Anwendung stellt eine Verbindung zu diesem Server her. Wir machen nur Login-Logout-Management, alles ist einfach und funktioniert. Aber nach einiger Zeit, normalerweise 2-3 Stunden, verschwindet die Hälfte des Kunden aus der Liste der Online-Kunden.Ist es möglich, dass das Ereignis OnDisconnected ausgelöst wird, obwohl die Verbindung auf dem SignalR SelfHost-Server nicht geschlossen ist?

Es scheint, dass OnDisconnected Ereignis auf Server für Verbindungen ausgelöst wird, obwohl sie nicht geschlossen sind. Nach dem Ereignis OnDisconnected können diese Verbindungen weiterhin Daten senden und empfangen.

Gibt es ein Szenario, das zu OnDisconnected Ereignis auf Server ausgelöst wird, wenn die Verbindung nicht geschlossen ist?

Antwort

1

Gibt es ein Szenario, das dazu führt, OnDisconnected Ereignis auf Server ausgelöst, wenn die Verbindung nicht geschlossen ist?

Ja. Wenn das Zeitlimit der Verbindung überschritten wird, wird zuerst die Verbindung getrennt und dann erneut hergestellt (wenn der Client die Verbindung nicht explizit schließt).

public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled) 
{ 
    if (stopCalled) 
    { 
     Console.WriteLine(String.Format("Client {0} explicitly closed the connection.", Context.ConnectionId)); 
    } 
    else 
    { 
     Console.WriteLine(String.Format("Client {0} timed out .", Context.ConnectionId)); 
    } 

    return base.OnDisconnected(); 
} 

Wie Sie hier sehen können. Wenn die Verbindung explizit getrennt wird (stopCalled ist wahr), wird die Verbindung zum Client sicher getrennt und die Verbindung wird nicht wiederhergestellt.

Wenn der Client wirklich nicht getrennt ist, kann es nach der Verbindungstrennung zu einer Verbindung kommen, wie in Ihrer Lernumgebung.

prüfen here Vordergrund Detail

+1

Vielen Dank für die Antwort, haben wir keine Kontrolle über OnReconnected Ereignis nicht, das war das Problem, denke ich. –

+1

überprüfen Sie bitte die Eindeutigkeit der Verbindungs-ID (wenn Sie sie behalten) auf Wiederverbunden. Wenn die Verbindung erneut hergestellt wird, ohne dass die Verbindung unterbrochen wird, haben Sie möglicherweise doppelte Datensätze. Überprüfen Sie hier http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections –