我有一个集线器如下:
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
时,客户端代码中根本不会发生任何事情。我做错了什么?
答案 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');
});