2012-04-03 77 views
2

我試圖創建一個服務器與客戶端SignalR廣播機制,它似乎沒有做任何事情。SignalR不廣播

我有這樣的輪轂:

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}); 
    } 
} 

我_Layouts.cshtml具有這樣的:

var _centralHub; 

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

和我有在局部一些代碼,通過使用AJAX一個jquery標籤加載:

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

現在在數據層,當一些CRUD操作發生時,我打電話DataMessageService.SendData ChangeNotification,但客戶端沒有任何反應。

我錯過了什麼嗎?

更新:我想這可能是一些做的VS web服務器啄但使用(在Win 7)完整的IIS時,它也會失敗。

另一個更新: 我混淆了我的服務與我的中心。我現在將它們拆分,看起來像下面這樣,但它仍然不起作用。

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 
    { 
    } 

:(

更信息:

這工作與Firefox,但不與IE或Chrome

我也試圖創建一個簡單的示例應用程序和這個工作細跟Chrome和IE。

鑑於我們沒有網絡套接字提供給我們,長輪詢可能不是股份公司爲我們的用戶/基礎設施提供想法。也許有一天...

+0

謝謝你的編輯麥克:)我不能讓代碼良好的格式化。 – Jonesie 2012-04-03 20:43:43

+0

我有過類似的奇怪問題與SignalR。從調用JS的虛擬服務器端方法,開始只是後,我讓服務器端調用客戶端的唯一方法。 '$ .connection.hub.start(function(){hubName.dummyMethodOnServer();}); – Svend 2012-04-15 14:08:25

+0

嘿,謝謝你。我做出了你所建議的改變,並且它有效......一次,然後停止。 :(不知道爲什麼,但有希望 – Jonesie 2012-04-18 02:21:27

回答

0

樞紐的新實例被創建每次得到解決,所以你不能堅持這樣的狀態的時間。

你可以得到所有客戶從this.Clients樞紐。

從輪轂類使用此之外的廣播:

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

謝謝。但是,我確實有這個和客戶是空的。 – Jonesie 2012-04-04 01:55:19

+0

更新。錯誤的事件來自哪裏。 – drch 2012-04-04 01:59:34

+0

再次感謝,但它仍然不會工作。我上面的更新。 – Jonesie 2012-04-04 02:31:53