SignalR aufrufende client die Methode von außerhalb hub mit GlobalHost.ConnectionManager.GetHubContext nicht funktioniert. Aber das aufrufen von innerhalb der Nabe nicht
Bin ich versucht, rufen Sie eine client-Methode aus einem .net-Web-API-controller Aktion.
Kann ich tun?
Die einzige post, die ich finden kann, kommt nah an, was ich Suche zu tun, ist dieses hier:
SignalR + Buchung eine Nachricht an einen Hub über eine action Methode
Dort wird eine Nachricht gesendet, der innerhalb einer asp.net MVC-controller-action mit GlobalHost.ConnectionManager.GetHubContext.
Wenn ich versuche, in meinem Web-API-Aktion keine Fehler geworfen werden, aber die Methode "methodInJavascript" wird nie aufgerufen auf der client-Seite.
Public ActionResult MyControllerMethod()
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.methodInJavascript("hello world");
//or
context.Clients.Group("groupname").methodInJavascript("hello world");
}
Wenn ich einen break-Punkt im inneren, der Aktion, sehe ich, dass der code wird erreicht und ausgeführt werden. Nichts geschieht über die javascript-client-Seite aber.
Warum? Ist ein Web-API, so anders unter der Haube, dass das nicht funktionieren? Hat noch jemand es ausprobiert und Erfolg gehabt?
Wenn ich die "methodInJavascript" aus "innerhalb von" mein hub, funktioniert es tadellos. Will einfach nicht funktionieren, wenn der Aufruf innerhalb einer .net-Web-API-controller Aktion.
UPDATE:
Nach der recherche zu diesem Problem habe ich keine Lösung. Ich kann nur annehmen, es ist etwas, das fehlen von Beispielen, wie dies Server-zu-client-Nachrichten nicht durch, mit SignalR in ASP.NET MVC 4 und diese Aufruf SignalR-hub von WebAPI controller Probleme wie vielleicht gibt es eine zusätzliche Konfiguration Schritt, damit das aufrufen von einem HubContext oder so etwas. Der code, den ich ursprünglich hier gepostet ist wie das, was erscheint in diesen Beispielen nicht nachgewiesen werden fehlerhaft in irgendeiner Weise. Kann jemand sehen, der Fehler im code? Der Aufruf aus einer html funktioniert. Ich Tue es ausgiebig in meine apps und nie Erfahrung ein Problem. Ich habe noch nie einen Anruf von der HubContext in einen API-controller arbeiten. Keine Fehler. Nur keine Ergebnisse auf dem client.
GELÖST (Art):
Obige Code funktioniert in der Tat wie wenn veröffentlicht. Funktioniert nicht in Visual Studio, dev-Umgebung über localhost aber. Kein Fehler, aber kein Ergebnis auf der client-Seite. Publishing der code ist auf einen richtigen server auf dem web funktioniert in der Tat. Ich hätte nie gedacht, es wäre ein Unterschied, so dass ich nie versucht. Dachte, wenn es nicht lokal arbeiten, es würde nicht funktionieren, veröffentlicht. Es funktioniert jetzt Leben, aber ich Frage mich, warum es nicht funktioniert über localhost in der dev-Umgebung. Kann nicht lokal testen mit Haltepunkten und solchen.
Habe ich das Gefühl, es ist, dass der signalr virtuelle Verzeichnis. Etwas ist anders, wenn lokal ausgeführt, vs veröffentlicht. Nicht sicher was, aber ich sehe viele posts wie http://www.bitwisejourneys.com/signalr-hosting-in-iis-a-nasty-gotcha/. Jetzt Lesen, um zu sehen, ob es gibt einen Weg, um es Arbeit sowohl lokal und veröffentlicht.
InformationsquelleAutor der Frage Robert | 2013-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stieß ich auf mit demselben Thema paar Tagen. Das hat meine 2 Tage Lösungen zu finden und zu lösen. Nach einigen schweren untersuchen, die Probleme, die Ursache war die signalr-dependency resolver, dass ich customly.
Am Ende fand ich dieser link und sagte dies:
Die wichtige Stelle hier der HINWEIS. Natürlich nach signalr 2.0 dieser Dokumentation werden veraltet. Also habe ich gemischt, einige von hier mit der neuen API, SignalR. Im neuen SignalR-API nicht verwenden WebActivatorEx mehr. OwinStartup bevorzugt statt WebActivator.
- Und in deiner global.asax
Ich will nicht senden Sie alle den code hier, zeigt sich das eigentliche problem.
Also bei mir klappt alles jetzt in Ordnung. Dependency injection funktioniert auch auch. Aber der schlechte Teil ist überall, wo ich suchte David Fowler sagte, Seine "by design". Ich begann zu denken, ist dieses design wirklich notwendig ist oder ein Fehler.
Hoffe es hilft jemanden, der macht die Forschung für das gleiche problem.
InformationsquelleAutor der Antwort Yusuf Uzun
Ich hatte das gleiche Problem, und es ist in Bezug auf IoC (mit was auch immer wie ninject oder Schloss).
Wenn Sie den globalen dependency resolver für Ihre IoC-manager, Sie ersetzen auch die SignalR inner pipeline-Auflösung. Dies macht das SingleTon client-hub nicht korrekt funktionieren.
Ich löste es, indem nur die Server-Hubs als IoC-ed
Der code unten erfordert SignalHubActivator (Sie finden es im internet)
Nun, GlobalHost.ConnectionManager.GetHubContext zurück, die single-Instanz UND der client-Methoden aufgerufen werden, wieder richtig!
InformationsquelleAutor der Antwort Egbert Nierop