2016-05-06 7 views
0

Hintergrund

Following along this question, ich habe ein Problem mit dem Versuch, den Benutzer zu „sagen“, die in erster Linie und sonst niemanden genannt.SignalR Rückkehr zu einem Client erzeugt durch die Steuerung


Im Rahmen der Entdeckung Phase für schnelle und schmutzige Lösungen zu suchen, wurde mir gesagt, dass SignalR eine gute Wahl in Entdeckung und Feedback zu helfen sei. Mir wurde jedoch gesagt, dass es nur zum Testen und nie zur Produktion wäre.

Später ändert die Geschäftsleitung ihre Meinung.

Also jetzt bin ich dran, dieses Projekt zu knöpfen und es für den Start bereit zu machen. Ich habe es schnell und schmutzig gemacht, also habe ich einen Fehler, den ich nicht effizient beheben kann. Ich sage es allen zu senden, aber ich brauche es nur an einen Client zu senden.

Aktuelle Implementierung

Der Code wird viele Dinge ausgeschnitten hat, aber es sollte den jist davon geben. Zuerst der Controller.

public class HomeController : Controller 
{ 
    HubResponder hub = new HubResponder(); 
    public String RunProcess(FormCollection ProcessingInfo) 
    { 
     hub.SignalUser("String"); 
    } 
} 

Die Sache, die ich hier sehe, ist, dass, da ich die Nabe von der anstelle des Client-Controller bauen es nicht Client-Informationen empfängt. Ich kann es auch nicht in einen Hub verwandeln, da es bereits den Controller erbt. Hier ist der Hub:

Jetzt funktioniert das aber sagt es an alle senden, was verwirrend sein wird.

+0

Mögliches Duplikat von [Nachricht an bestimmte Benutzer im Signal senden] (http://stackoverflow.com/questions/31130094/send-message-to-spezific-user-in-signalr) –

+0

Diesmal nicht. Ich habe nicht die ConnectionID, damit ich es nicht verschieben kann. –

+0

Sie sollten es verfolgen jede Signalverbindung hat connectionId. –

Antwort

-1

Okay, also hier ist die Antwort, die ich gefunden habe. Durch die Verwendung einer versteckten Eingabe, die die Verbindungs-ID enthält, werde ich beim Übergeben des Formulars nur diesem bestimmten Ort zugewiesen.

<input id="SignalConnectionID" type="hidden" name="SignalConnectionID" value="" /> 

In anderen Ländern:

$.connection.hub.start() 
.done(function() { 
$('#SignalConnectionID').val($.connection.hub.id); 
}); 

Dann, wenn das Formular I vorgelegt und gibt dem instanziiert Hub die Verbindungs-ID. Das ist es im Grunde.

+0

Ja. Das funktioniert in idealen Szenarien. Aber laut [docs] (http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#onreconnected) wird SignalR eine neue connectionId nach 'zuweisen eine vorübergehende Unterbrechung der Verbindung mit OnReconnected. Dies wird in Ihrer Workaround nicht behandelt und muss auf der Serverseite behandelt werden. –

+0

In dem Fall, den ich benutze, wenn der Benutzer zu lange auf der Seite verweilt ist etwas in der Regel falsch. Aber ich kann versuchen, etwas für OnReconnected zu implementieren. –

+0

Ein Reconnect-Ereignis kann in den ersten Sekunden des Verweilens passieren :) –

Verwandte Themen