Signalr - kommen mehrere Gruppen

Edit: David Fowler angefordert für den vollständigen code, um zu versuchen, das problem zu replizieren. Hier ist der vollständige code

Zusätzlich zu dem code hier wiedergegeben, ich habe auch gleich ein komplettes Visual-Studio-2010-Lösung zu der folgenden URL

http://www.sendspace.com/file/lfeurf (URL ist jetzt abgelaufen und funktioniert nicht mehr)

Bitte fühlen Sie sich frei zu downloaden und es zu testen.

Hier sind meine Ergebnisse

  1. Nur eine zusätzliche Gruppe in der Hub-code wird die Anwendung zu arbeiten
    gut mit keine Probleme
  2. Zugabe von 2 Gruppen wird entweder aufhören zu signalr aus
    arbeiten oder arbeiten nur in eine Richtung. also: die Nachricht wird
    übertragen aus dem browser 1 browser 2 aber nicht übertragen werden
    mit browser 2 browser 1

Ursprünglichen Frage:
Ich bin mit Signalr-1.0.0-rc1 in einem MVC3-website. Meine Klienten müssen manchmal auch mehreren Gruppen angehören. Hier ist der code, der in meinem Hub und client-side javascript

Client-side javascript-und HTML -

<script type="text/javascript">
    //start signalr
    var message = $.connection.messageHub;

    //Declare a function on the message hub so the server can invoke it          
    message.client.send = function (message) {
        alert(message);
    }

    //Start the connection and join groups
    $.connection.hub.start();

    //bind click event of button to invoke send function on server
    $(document).ready(function () {
        $("#target").click(function () {
            message.server.send("Hello from signalr");
        });
    });
</script>

<button id="target">Click to send message to other clients</button>

Server-side-Hub

public class MessageHub: Hub
    {
        public Task AddGroups()
        {
            //add 1st group
            Groups.Add(Context.ConnectionId, "foo");
            //add 2nd group
            return Groups.Add(Context.ConnectionId, "foobar");
        }

        //this method will be called from the client
        public void Send(string message)
        {
            Clients.OthersInGroup("foobar").send(message);
        }

        //automatically join groups when client first connects
        public override Task OnConnected()
        {
            return AddGroups();
        }

        //rejoin groups if client disconnects and then reconnects
        public override Task OnReconnected()
        {
            return AddGroups();
        }

    }

Den obigen code hinzufügen sollten zwei Gruppen zu jedem client, wenn Sie zuerst eine Verbindung herstellen, aber es funktioniert nicht. Ich trat durch den C# - code mit einem debugger und keine Fehler geworfen werden. Auch ich dont sehen irgendwelche javascript-Fehler mit Chrome die Konsole, aber die Send-Funktion nicht aufgerufen wird, auf den clients. Ich änderte dann die AddGroups () - Methode auf, um nur eine Gruppe, wie unten dargestellt

public Task AddGroups()
   {
        //dont add first group
        //Groups.Add(Context.ConnectionId, "foo");
        //add only second group
        return Groups.Add(Context.ConnectionId, "foobar");
   }

Nun meine Anwendung perfekt funktioniert. Wie füge ich eine zweite Gruppe? Wie es aussieht habe ich das falsch verstanden Beitritt zu mehreren Gruppen. Könnte jemand mir zeigen den rechten Weg, es zu tun?

  • Was bedeutet der client-seitige code Aussehen?
  • Hinzugefügt client-seitigen code
  • Was ist die "bestimmte" Ereignis, das stattfindet und Wann wird es stattfinden. Ich will reproduzieren Sie das problem, und ich möchte den GENAUEN code, den Sie verwenden
  • David, ich bearbeitet haben, meine Frage zu den vollständigen code. Außerdem habe ich auch gleich ein VS2010-Projekt demonstriert die Ausgabe auf sendspace.com/file/lfeurf . Sie sollten in der Lage sein zu erstellen, auszuführen und das problem reproduzieren.
  • David, halter73 der fix funktioniert perfekt für mich. Ist das ein bug, den Sie beheben können, die in der nächsten Version, oder habe ich das mit OnConnected und OnReconnected in die falsche Richtung?
  • Es ist eingereicht und wird derzeit behoben.

InformationsquelleAutor | 2012-12-16
Schreibe einen Kommentar