SignalR - Nachricht senden OnConnected

8

Ich habe heute mit SignalR experimentiert und es ist wirklich nett. Grundsätzlich wollte ich Folgendes erreichen:

Sobald ein Gerät eine Verbindung herstellt, sollte es eine Nachricht an die erste Nachricht senden. Wenn mehr Geräte als 1 verbunden sind, möchte ich zwei Nachrichten senden. Eins zu allem außer dem letzten verbundenen Client. Und eine Nachricht an nur der letzte verbundene Client.

Der Code, den ich verwendet habe, funktioniert perfekt, wenn ich ihn in einen benutzerdefinierten API-Controller setze und im Prinzip die Aktion aufruft, aber das ist nicht das, was ich möchte.

Ich möchte die Nachrichten senden, sobald ein Gerät innerhalb von OnConnected ohne Benutzerinteraktion eine Verbindung herstellt, aber wenn ich meinen Code innerhalb der OnConnected überschreiben, funktioniert es nicht mehr. Es wird nicht mehr an die spezifischen Clients gesendet (zuerst verbunden und zuletzt verbunden).

Ich hoffe, dass jemand mir dabei helfen kann, weil ich jetzt seit ein paar Stunden meinen Kopf angeschlagen habe.

%Vor%     
Mittchel 20.05.2015, 22:35
quelle

4 Antworten

4

Danke für die Hilfe (Upvoted you guys). Tatsächlich fand das Problem .. es war in meinem Client. Ich habe zuerst die Hallo-Funktion abonniert und danach die HubConnection gestartet. Sobald ich diese Reihenfolge geändert habe, hat alles gut funktioniert.

Es hat mit dem folgenden Client-Code funktioniert:

%Vor%     
Mittchel 21.05.2015, 16:58
quelle
10

Wenn ich etwas aus Ihrer Frage nicht vermisse, sieht die Lösung für mich ziemlich einfach aus, Sie müssen nur zur Verwendung von

wechseln %Vor%

anstatt zu versuchen, sich selbst zu verstehen, wer die letzte verbundene ID ist. Dasselbe gilt für die anderen:

%Vor%

Sie brauchen nicht die ganze Logik, die Sie eingerichtet haben, diese zwei Zeilen tun, was Sie brauchen, und sie arbeiten innerhalb von OnConnected .

    
Wasp 21.05.2015 10:33
quelle
3

Da Sie noch keine Verbindung hergestellt haben, ist es zu diesem Zeitpunkt nicht möglich, den Client .hello() function in OnConnected aufzurufen. Wir können jedoch eine Server-Hub-Methode definieren und diese sofort bei unserer Verbindung .done callback aufrufen. Dann können wir in unserer neuen Servermethode die Logik neu zuweisen, die Sie derzeit in OnConnected haben.

Dies wird unser Setup ein wenig verändern und einige zusätzliche Schritte einführen, aber beachte das folgende Beispiel ...

%Vor% %Vor%

Die Grundidee ist also zuerst

  1. Verbinden = & gt; %Code%
  2. Aufruf .done(function() { ... });
  3. Führe Logik innerhalb dieser Methode aus
  4. Wenn wir mit den Bedingungen zufrieden sind, rufen Sie unsere server.afterConnected() -Client-Funktion
  5. auf

Hinweis - diese Implementierung gilt für einen JavaScript-Client - dieselbe Idee kann jedoch auch in einen .net-Client übersetzt werden. Dies ist meist ein architektonisches Problem.

    
scniro 21.05.2015 00:39
quelle
1

Nun ... du gibst eine Aufgabe zurück ... also denke ich, dass das Problem sein könnte ... Sie sollten zuerst Ihren Code ausführen und dann die Aufgabe zurückgeben ... oder setzen Sie eine ContinueWith ... wie ...

%Vor%

Ich habe das nicht getestet ... es ist nur eine Vermutung ..

    
Pepe Garcia Gaxiola 21.05.2015 00:19
quelle