Mar*_*cel 17 signalr signalr-hub
我似乎与SignalR的JS Client Hub有问题.
问题是'on'处理程序似乎不起作用 - 它不会产生错误,但不会接收服务器发送的任何信号.下面的代码显示了一个提取,我调用服务器(使用调用)工作正常 - 然后在服务器上我回调acceptHubData应该在客户端上获取但不是.
我的目标是当导航到页面时,每个页面将打开与特定集线器的连接,并在用户移动到另一个页面时释放此连接!
编辑:使用以下代码片段工作,但我想知道为什么下面的代码使用'on'事件不起作用!
var superHub = $.connection.mySuperHub;
superHub.client.acceptHubData = function (data) {
$('<li>hello there' + data + '</li>').prependTo($('#ul1'))
}
$.connection.hub.start().done(function () {
$('<li>done phase 1</li>').prependTo($('#ul1'))
});
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!
这是客户端代码(以js为单位)
$(document).ready(function () {
var myHub;
try {
var connection = $.hubConnection();
connection.start().done(function () {
myHub = connection.createHubProxy("mySuperHub");
myHub.on('acceptHubData', function (data) {
alert(data); // THIS IS NOT CALLED!
});
myHub.invoke('AcceptSignal', "hello from the client2");
});
}
catch (e) {
alert(e.message);
}
});
Run Code Online (Sandbox Code Playgroud)
这是服务器代码:
[HubName("mySuperHub")]
public class MyHub : Hub
{
private readonly HubEngine _hubEngine;
public MyHub() : this(HubEngine.Instance) { }
public MyHub(HubEngine hubEngine)
{
_hubEngine = hubEngine;
}
public void AcceptSignal(string msg)
{
Clients.Caller.acceptHubData("hi");
Clients.All.acceptHubData("hi");
}
}
Run Code Online (Sandbox Code Playgroud)
hal*_*r73 43
您仍然可以使用该on方法在最新版本的SignalR中为JS客户端集线器方法调用添加事件,但如果您未hubProxy在调用之前添加任何事件侦听器hubConnection.start(),则不会订阅该集线器.SignalR订阅了hubConnection启动时具有事件处理程序的集线器.如果您未订阅集线器,则在start()之后将任何事件添加到该集线器将不起作用.
如果在start()之前向集线器添加至少一个事件侦听器,即使它没有执行任何操作,您也可以on在start()之后使用所需的任何其他事件处理程序添加到集线器,并且将调用您的处理程序.
使用hubProxy.on('eventName', function (...或autogeneratedHubProxy.client.eventName = function (...在调用之前添加事件无关紧要start(),但只有在调用on之后才会成功添加事件侦听start()器.