我試圖創建一個服務器與客戶端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。
鑑於我們沒有網絡套接字提供給我們,長輪詢可能不是股份公司爲我們的用戶/基礎設施提供想法。也許有一天...
謝謝你的編輯麥克:)我不能讓代碼良好的格式化。 – Jonesie 2012-04-03 20:43:43
我有過類似的奇怪問題與SignalR。從調用JS的虛擬服務器端方法,開始只是後,我讓服務器端調用客戶端的唯一方法。 '$ .connection.hub.start(function(){hubName.dummyMethodOnServer();}); – Svend 2012-04-15 14:08:25
嘿,謝謝你。我做出了你所建議的改變,並且它有效......一次,然後停止。 :(不知道爲什麼,但有希望 – Jonesie 2012-04-18 02:21:27