SignalR 客户端未连接

SignalR client not connecting

我有一个集线器如下:

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

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

我的Startupclass中也有如下方法:

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 方法,但事实并非如此。调用 ServerSendClaimNotice 时,客户端代码中什么也没有发生。我做错了什么?

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

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

能否尝试添加一个非静态方法,看看客户端是否可以连接成功?

编辑

也许我应该换个说法:可能是集线器代理不可用,因为在调用者的上下文中没有可调用的非静态方法。您能否添加一个非静态方法并检查是否正在连接到集线器?

我假设 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');
    });