Frage

Ich habe den folgenden Hub in meiner MVC -Anwendung, von wo aus ich eine einfache Nachricht an meinen Client -Seitencode senden möchte:

using SignalR.Hubs;  

public  class Progress : Hub
        {
            public void 

Send(string message)
            {
                // Call the addMessage method on all clients
                Clients.addMessage(message);
            }

            public Progress()
            {
               Clients.addMessage("Starting to analyze image");
            }                 
        }

Und das folgende JavaScript aus meiner Ansicht

    <script src="/Scripts/jquery.signalR.js" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>

<script type="text/javascript">
    $(document).ready(function () {

        // Proxy created on the fly
        var connection = $.connection('/signalr/hubs/progress');

        // Declare a function on the chat hub so the server can invoke it
        connection.addMessage = function (message) {
            $('#messages').append('<li>' + message.Content + '</li>');
        };


        // Start the connection
        connection.start();
    });
</script>
}

Mein Problem ist, wenn der Code den Konstruktor oder die Send -Methode aufruft, ist das Client -Objekt null.

Alles sieht gut aus, wenn ich den Client -Seitencode debugge. Der/SignalR/Hubs/Route gibt JavaScript -Code zurück und es gibt keine Fehler, wenn das JavaScript ausgeführt wird.

Ich kann hinzufügen, dass der Backend -Code über der Umgebungsumgebung umbraco 5 CMS läuft, von der ich nicht sicher bin, dass sie Störungen verursacht.

Irgendwelche Vorschläge, wie ich das debuggen/lösen kann?

War es hilfreich?

Lösung

Es hört sich so an, als würden Sie versuchen, eine Nachricht vom Server -Seitencode zu übertragen, indem Sie den Hub instanziieren. Leider funktioniert es nicht so. Sie können ein Beispiel dafür sehen, wie Sie hier Nachrichten von der Serverseite senden: https://github.com/signalr/signalr/wiki/hubs. Schauen Sie sich den Abschnitt "Übertragung über einen Hub außerhalb eines Hubs" an.

Das Folgende wird auf der Serverseite verwendet, auf der Sie die Sendung ausführen möchten

using SignalR.Infrastructure;

string message = "Test Message";
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
clients.addMessage(message);

Dies passt zu Ihrem Send() Methode, wenn Sie jedoch versuchen, einen Fortschrittsanzeige -Indikator einzurichten, möchten Sie wahrscheinlich nur Nachrichten an den Anrufer senden. In diesem Fall müssen Sie die Fortschrittsmethode aktualisieren Caller.addMessage("Starting to analyze image");. Um dies von außerhalb des Hubs zu tun, ist etwas schwieriger, da Sie die Client -ID für die Verbindung, die Sie aktualisieren möchten, im Auge behalten müssen. Sobald Sie wissen, dass sich die oben genannten ändert::

clients[clientId].addMessage(message);

Andere Tipps

Sie müssen die Dokumente lesen. Alles in Ihrem Beispiel sieht falsch aus. Fang hier an:

https://github.com/signalr/signalr/wiki/quickstart-hubs

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top