SignalR客户端无法连接

时间:2015-09-15 04:18:48

标签: asp.net-mvc asp.net-mvc-5 signalr

我有一个集线器如下:

GIT_COMMIT_2

到目前为止,它专门用于将消息从MVC控制器发送到视图。

我的public class MessagingHub : Hub { private static readonly IHubContext HubContext = GlobalHost.ConnectionManager.GetHubContext<MessagingHub>(); public static void ServerSendClaimNotice(Claim claim) { HubContext.Clients.All.showClaimNotice(claim); } public override Task OnConnected() { return base.OnConnected(); } } 课程中也有以下方法:

Startup

然后我有以下视图脚本:

public void Configuration(IAppBuilder app)
{
    ConfigureAuth(app);
    app.MapSignalR();
}

在调用var msgHub; $(function() { var msgHub = $.connection.messagingHub; msgHub.client.showClaimNotice = function(claim) { debugger; displayClaimNotice(claim); }; $.connection.hub.start() .done(function() { console.log('Now connected'); }) .fail(function() { console.log('Could not connect'); }); }); 时,我希望调用$.connection.hub.start方法,而不是。调用OnConnected时,客户端代码中根本不会发生任何事情。我做错了什么?

2 个答案:

答案 0 :(得分:0)

您确定静态方法对于信号器客户端有效吗?

这是一个假设(在文档中查找验证):静态方法将在集线器上下文之外使用(例如,您的后端进程,主机进程等)。我猜这个集线器不可用,因为没有可调用的方法(这可以解释为OnConnected没有被调用)。

您是否可以尝试添加非静态方法,然后看到客户端可以成功连接?

修改

也许我应该改写:可能是Hub Proxy不可用,因为在调用者的上下文中没有非静态方法可以调用。您是否可以添加非静态方法并检查是否正在与集线器建立连接?

答案 1 :(得分:0)

我认为js代码有问题

$.connection.hub.start()
    .done(function() {
        console.log('Now connected');
 })
    .fail(function() {
        console.log('Could not connect');
    });

它应该像这样:

$.connection.hub.start()
    .done(function() {
        console.log('Now connected');
    });
$.connection.hub.start()
    .fail(function() {
        console.log('Could not connect');
    });