2012-04-03 24 views
2

Ich versuche, einen Server zu Client-Broadcast-Mechanismus mit SignalR zu erstellen und es scheint nichts zu tun.SignalR nicht Broadcasting

Ich habe eine Nabe wie folgt aus:

public class DataMessageService : Hub, IClientNotificationService 
{ 
    dynamic _clients; 

    public DataMessageService(IConnectionManager connectionManager) 
    { 
     _clients = connectionManager.GetClients<DataMessageService>(); 
    } 

    public void SendDataChangeNotification(string entityName, string changeType, string id) 
    { 
     _clients.dataChangeNotification(new string[] {entityName, changeType, id}); 
    } 
} 

Mein _Layouts.cshtml hat dies:

var _centralHub; 

$(function() { 
    // startup the signalr hub and get the proxies we need 
    _centralHub = $.connection.dataMessageService; 
    $.connection.hub.start(); 
}); 

Und ich habe einige Code in einem Teil, die durch eine jquery Reiter Ajax geladen wird:

_centralHub.dataChangeNotification = function (data) { 
    alert(data[0] + "::" + data[1] + "::" + data[2]); 
    if (data[0] == 'User') { 
     grid.refresh(); 
    } 
}; 

nun in der Datenschicht, wenn einige crud Handlung vorgenommen wird, nenne ich DataMessageService.SendData ChangeNotification, aber am Client-Ende passiert nichts.

Fehle ich etwas?

Update: Ich dachte, es könnte etwas mit dem vs-Webserver-Ding zu tun haben, aber es scheitert auch, wenn ich den vollständigen IIS (auf Win 7) benutze.

Ein weiteres Update: Ich hatte meinen Service mit meinem Hub verwechselt. Ich spalte diese jetzt so, dass es wie folgt aussieht, aber es funktioniert immer noch nicht.

public class DataMessageService : IClientNotificationService 
    { 
    public void SendDataChangeNotification(string entityName, string changeType, string id) 
    { 
     IConnectionManager icm = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
     dynamic clients = icm.GetClients<DataMessageHub>();  
     clients.dataChangeNotification(new string[] { entityName, changeType, id }); 
    } 
    } 

    public class DataMessageHub : Hub 
    { 
    } 

:(

Noch mehr Informationen:.

Der mit FireFox funktioniert aber nicht mit IE oder Chrome

ich auch eine einfache Beispielanwendung zu erstellen versucht, und das funktionierte ok mit Chrome und IE.

Da wir keine Web-Sockets zur Verfügung haben, ist Long-Polling möglicherweise nicht ag ood Idee für unsere Benutzer/Infrastruktur. Vielleicht eines Tages ...

+0

Danke für die Bearbeitung Mike :) Ich konnte nicht den Code erhalten schön zu formatieren. – Jonesie

+0

Ich hatte ähnliche seltsame Probleme mit SignalR. Der Aufruf einer serverseitigen Dummy-Methode aus dem JS nach dem Start war für mich die einzige Möglichkeit, serverseitige Aufrufe an den Client zu erhalten. '$ .connection.hub.start (function() {hubName.dummyMethodOnServer();}); – Svend

+0

Hey, danke dafür. Ich habe die Änderung vorgenommen, die Sie vorgeschlagen haben, und es hat funktioniert ... einmal, dann gestoppt. :(Nicht sicher warum, aber es gibt Hoffnung. – Jonesie

Antwort

0

Eine neue Instanz des Hubs wird jedes Mal erstellt, wenn sie aufgelöst wird, so dass Sie den Status nicht beibehalten können.

Sie können alle Clients im Hub von this.Clients abrufen.

Um Broadcast von außerhalb der Nabe Klasse Verwendung dieses:

IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
dynamic clients = connectionManager.GetClients<DataMessageService>(); 
clients.dataChangeNotification(new string[] {entityName, changeType, id}); 
+0

Danke. Allerdings hatte ich genau das und Kunden war null. – Jonesie

+0

Aktualisiert. Mistread über, wo die Ereignisse herkommen. – drch

+0

Danke nochmal, aber es wird immer noch nicht funktionieren. Siehe Mein Update oben. – Jonesie