【发布时间】:2019-05-22 11:33:54
【问题描述】:
在我的 MVC 5 应用程序中,我在页面加载时在客户端设置 Signal R 连接,这按预期工作。
稍后我想添加一个额外的处理程序并进行服务器端调用,我可以看到服务器收到此调用,然后启动一些客户端调用,客户端的处理程序不会被调用。
页面加载时的连接设置
function initialiseRealTimeDataRetrieval() {
var hub = $.connection.autoGeneratedProxyForHub;
hub.client.recieveRealTimeData = function (data) {
//Do Stuff
};
$.connection.hub.start().done(function () {
hub.server.getRealTimeData();
});
}
稍后再拨打电话
function initialiseFeed () {
var hub = $.connection.autoGeneratedProxyForHub;
hub.client.recieveRealTimeDataFeed = function (data) {
//Do stuff
};
if ($.connection.hub.state == $.connection.connectionState.connected) {
hub.server.getRealTimeDataFeed();
}
else {
$.connection.hub.start().done(function () {
hub.server.getRealTimeDataFeed();
});
}
}
到目前为止,我已经尝试了以下方法:
- 确保在服务器上调用从客户端到服务器的调用。
- 确保附加调用与页面加载时执行的调用和处理程序一起进行时按预期工作。
- 查看文档以了解是否必须重新启动连接才能注册新的处理程序。
- 在添加新处理程序后尝试了各种重新启动连接的方法
对于附加调用,以下内容按预期工作,但是在页面加载时为连接所做的一切都是多余的:
function initialiseFeed () {
var hub = $.connection.autoGeneratedProxyForHub;
hub.client.recieveRealTimeDataFeed = function (data) {
//Do stuff
};
$.connection.hub.stop();
$.connection.hub.start().done(function () {
hub.server.getRealTimeDataFeed();
});
}
通过调试器检查集线器对象确实表明所有客户端都已连接,包括其他客户端。
【问题讨论】:
-
您是否尝试过在函数之外声明集线器,然后只声明一次,然后每次需要添加新客户端时使用它?而且 mybe 每次添加新客户时都需要停止 + 启动..
标签: javascript signalr