Javascript 在JQuery UI小部件中不触发信号器回调
我试图创建一个jQueryUI小部件,它使用SignalR(2.2.0)从服务器接收实时更新。在服务器上调用方法可以正常工作,但是从服务器调用客户机回调不会在客户机上触发 正如这里所建议的,我已经在客户端上启用了日志记录:我可以在控制台中看到连接设置得很好,但是从未调用客户端方法。没有任何类型的错误消息。在启动连接之前,我还在集线器代理上定义了客户端方法,如下所示:Javascript 在JQuery UI小部件中不触发信号器回调,javascript,c#,asp.net,jquery-ui,signalr,Javascript,C#,Asp.net,Jquery Ui,Signalr,我试图创建一个jQueryUI小部件,它使用SignalR(2.2.0)从服务器接收实时更新。在服务器上调用方法可以正常工作,但是从服务器调用客户机回调不会在客户机上触发 正如这里所建议的,我已经在客户端上启用了日志记录:我可以在控制台中看到连接设置得很好,但是从未调用客户端方法。没有任何类型的错误消息。在启动连接之前,我还在集线器代理上定义了客户端方法,如下所示: _bindClientCallbacks: function () { theHub.client.broadCastTo
_bindClientCallbacks: function () {
theHub.client.broadCastToClient = function (message) {
twr.log(message);
};
}
_startSignalRClient: function () {
$.connection.hub.logging = true;
$.connection.hub.start()
.done(function () {
twr.log("Connected to SignalR hub, id=" + $.connection.hub.id);
})
.fail(function () {
});
}
然后,我启动集线器连接,如下所示:
_bindClientCallbacks: function () {
theHub.client.broadCastToClient = function (message) {
twr.log(message);
};
}
_startSignalRClient: function () {
$.connection.hub.logging = true;
$.connection.hub.start()
.done(function () {
twr.log("Connected to SignalR hub, id=" + $.connection.hub.id);
})
.fail(function () {
});
}
这些方法在JQuery小部件的“\u create()”函数中调用,如下所示:
_create: function () {
theHub = $.connection.DataImportHub;
this._bindClientCallbacks();
this._startSignalRClient();
}
这很好,我可以获得一个id为的有效连接。我还可以从客户端调用服务器方法。但是,当我尝试从服务器调用客户端上的broadCastToClient
方法时,如下所示:
public void BroadCastToClient(string userId, string message)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<DataImportHub>();
foreach (var connectionId in _connections.GetConnections(userId))
{
hubContext.Clients.Client(connectionId).broadCastToClient(message);
}
}
public void broadcastoclient(字符串userId,字符串消息)
{
var hubContext=GlobalHost.ConnectionManager.GetHubContext();
foreach(在_connections.GetConnections(userId)中的var connectionId)
{
hubContext.Clients.Client(connectionId).broadCastToClient(消息);
}
}
客户机上没有发生任何事情。。即使服务器确实找到了与我在客户端上获得的连接id对应的有效连接
我遗漏了什么?刚刚通过阅读本文找到了解决方案。显然,在Owin启动类中设置自定义信号器依赖项解析器会中断javascript回调。将依赖项解析器设置代码移动到Global.asax中的Application_Start即可。我真的不明白为什么会发生这种事 启动时DI设置错误。cs
app.Map("/signalr", map =>
{
var hubConfiguration = new HubConfiguration
{
Resolver = new NinjectSignalRDependencyResolver(new StandardKernel())
};
map.RunSignalR(hubConfiguration);
});
在Global.asax中良好的DI设置
protected void Application_Start()
{
GlobalHost.DependencyResolver = new NinjectSignalRDependencyResolver(new StandardKernel());
}
刚刚通过阅读这篇文章找到了解决方案。显然,在Owin启动类中设置自定义信号器依赖项解析器会中断javascript回调。将依赖项解析器设置代码移动到Global.asax中的Application_Start即可。我真的不明白为什么会发生这种事 启动时DI设置错误。cs
app.Map("/signalr", map =>
{
var hubConfiguration = new HubConfiguration
{
Resolver = new NinjectSignalRDependencyResolver(new StandardKernel())
};
map.RunSignalR(hubConfiguration);
});
在Global.asax中良好的DI设置
protected void Application_Start()
{
GlobalHost.DependencyResolver = new NinjectSignalRDependencyResolver(new StandardKernel());
}
确保在
\u startSignalRClient
之前调用\u bindClientCallbacks
…我在JQuery UI小部件的_create函数中在_startSignalRClient之前调用_bindClientCallbacks(为了澄清,我将该函数添加到帖子中)。。因此,我认为这不是问题所在。无法在我的计算机上解决hubContext.Clients.Client()
,请尝试hubContext.Client()
。IHubContext接口仅公开属性客户端和组,因此我无法对其调用Client()。我尝试将消息发送到hubContext.Clients.All,但这也不会触发回调..只是一个问题:为什么不使用huContext.Clients.All.broadcastoclient(消息)
?确保在\u startSignalRClient
之前调用\u bindClientCallbacks
…我在JQuery UI小部件的_create函数中调用_bindClientCallbacks,在_startSignalRClient之前调用(我将该函数添加到帖子中以供澄清)。。因此,我认为这不是问题所在。无法在我的计算机上解决hubContext.Clients.Client()
,请尝试hubContext.Client()
。IHubContext接口仅公开属性客户端和组,因此我无法对其调用Client()。我尝试将消息发送到hubContext.Clients.All,但这也不会触发回调..只是一个问题:为什么不使用huContext.Clients.All.broadcastoclient(消息)代码>?