Invoke-signalR-Methode innerhalb der client-Methode
Ich bin mit signalR-version 2.1.2. Und ich bin mit Konsole-Anwendung als SignalrClient. Ich rufe eine Methode, also Ein und nachdem Sie die Antwort , ich habe invoke-Methode-B basierend auf der Antwort-Methode-A. In diesem Szenario bin ich in der Lage, erfolgreich aufrufen und bekomme keine Antwort von Methode B. Was ist mein Fehler????. Hier mein code
var hubConnection = new HubConnection("Url");
IHubProxy proxy = hubConnection.CreateHubProxy("HitProxy");
proxy.On<bool>("Client-method-B", (retvAl) =>
{
Console.WriteLine("Method-B response");
});
proxy.On<bool>("Client-method-A", (isConnected) =>
{
Console.WriteLine("Method-A response");
if(isConnected)
{
proxy.Invoke("method-B", "someValue").Wait();
}
});
hubConnection.Start().Wait();
proxy.Invoke("method-A", "123").Wait();
Hier bin ich nicht immer jede Antwort von 'Methode-B'. Danke.
Sollten Sie veröffentlichen Sie Ihre Hub-code, es könnte sein, ein Problem gibt es.
InformationsquelleAutor Suresh | 2014-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der beste Weg, um das Ergebnis, die von der SignalR server-Methode wird zum Lesen der Rückgabewert, anstatt den Aufruf einer client-Methode auf der rufenden Seite. Zum Beispiel, Sie Lesen die Antwort von der Methode-wie folgt:
Erwarten, dass die Signatur der Methode-ist so etwas wie:
Diese Weise werden Sie nicht haben, um rufen Sie eine client-Methode nur das Ergebnis einer server-Methode an den Aufrufer. Sie kann sich auf einem anderen server die Methode vom callback von einem anderen server den Aufruf der Methode wie diese:
Davon ausgegangen, dass die Methode-B gibt einen string-Wert auf der server-Seite.
InformationsquelleAutor Xmindz
In der code, den Sie zusammen Sie erstellen die proxy -
aber später u
so ist es nur eine Art und proxy == hubProxy ?
Ich rate Ihnen, tun Sie 3 Dinge
Suresh eine Sache, die ich bemerkt: in der callback-Sie proxy benutzen.Invoke("Methode B", "someValue").Wait(); so sind Sie die Blockierung für den thread, dass signalr wahrscheinlich verwendet für das senden von Nachricht an server. Nicht sicher was Sie bedeuten von "ich habe einfach versucht, Versand-Ereignis, vorbei an den aktuellen thread"? Versuchen Sie, verwenden Sie den Task.Laufen für den start ok? sth like Aufgabe.Run(() => proxy.Invoke("Methode B", "someValue").Wait());
Ich bin mit diesem.Dispatcher.Invoke(() => Testmethod())) im 'Client-Methode-Ein'. In dieser Methode Testmethod', ich wird aufgerufen 'Methode-B' und 'Client-Methode-B' wird die Verbindung sofort. Ist dieser Ansatz richtig ist?
Das hängt davon ab. Sie sehen das größte problem in Ihrem code, die, glaube ich, ist Berufung .Wait() im Kontext des Threads, der durch signalR-client zum ausführen der Anruf. Mit Dem Versand.Aufrufen helfen könnte, noch daran erinnern, dass die Verwendung von statischen Invoke-Aufruf wird die aktuelle thread-dispatcher, also nicht sicher, was es genau sein würde, in deinem Fall (zum Beispiel für Konsolen-Anwendung gibt es kein Standard-Dispatcher erstellt).
InformationsquelleAutor Łukasz Zwierko