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.SendDataChangeNotification を呼び出しますが、クライアント エンドでは何も起こりません。
何か不足していますか?
更新: vs Webサーバーに関係しているのではないかと思いましたが、完全なIIS(Win 7)を使用している場合にも失敗します。
別の更新: サービスとハブを混同していました。これらを分割したので、次のようになりますが、まだ機能しません。
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 で問題なく動作しました。
利用可能な Web ソケットがないことを考えると、長いポーリングはユーザー/インフラストラクチャにとって良い考えではないかもしれません。いつの日にか...