来自控制器的SignalR消息,当事件触发时查看

时间:2018-01-10 14:22:19

标签: javascript asp.net-mvc signalr

我是SignalR的新手,并尝试在特定事件从API触发时实施通知。

尝试了什么:

Hub:

$c

控制器:

public class NotificationHub : Hub
{        
    private static IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();

    public static void Send( string content)
    {
        hubContext.Clients.All.addMessage(content);
    }
}

在视图中我应该使用什么来显示在条件下触发的消息?

查看,尝试过:

//static event from external API
public static void onTick(Tick TickData)
{
    if(TickData.InstrumentToken == buy.InstrumentToken)
    {                   
        NotificationHub.Send(TickData.Bid);   
    } 
}

还有什么需要让这个工作吗?

编辑:

阿什利的回答让我更接近,而且下面也有一些事情遗失,

  • connection.NotificationHub $(document).ready(function () { var conn = $.connection.NotificationHub; conn.client.addMessage = function (message) { alert(message); }; }); connection.notificationHub`

  • js文件引用的顺序应该是

1 jquery-1.10.2.min.js
2 jquery.signalR-2.1.0.min.js
3个信号器/集线器

但是现在执行它时会进入.fail(function()并且控制台显示错误, http://127.0.0.1:8080/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22notificationhub%22%7D%5D&_=1515664348026无法加载资源:net :: ERR_CONNECTION_REFUSE

请指教。提前致谢。

1 个答案:

答案 0 :(得分:0)

确保包含SignalR集线器源:

<script type="text/javascript" src="~/signalr/hubs"></script>

您尚未启动SignalR的连接,请添加:

$.connection.hub.start().done(function() {
    //connection has started :-)
}).fail(function() {
    //connection has failed to start :-(
});

使用您的示例,它将如下所示:

$(document).ready(function () {
    var conn = $.connection.NotificationHub;
    conn.client.addMessage = function (message) {
        alert(message);
    };

    $.connection.hub.start().done(function() {
        //connection has started :-)
        alert("connected");
    }).fail(function() {
        //connection has failed to start :-(
        alert("failed");
    });
});