SignalR必须在逻辑之前调用.done或.fail

3
我将尝试使用SignalR创建一个简单的Hello World。我有一个hub,
public class MyHub : Hub
{
    public void TestConnection(string message)
    {
        Clients.Caller.testConnection(message);
    }
}

还有一个使用Angular的JS文件,

var hub = $.connection.myHub;
hub.client.testMessage = function (message) {
    console.log("Test: " + message);
};
$.connection.hub.start().done(function () { 
    alert('signalR started');  
}).fail(function (reason) {
    console.log("SignalR connection failed: " + reason);
});
hub.server.testConnection("hello signalR").done(function () { });

当我加载页面时,我只想让控制台显示“hello signalR”。但是我收到了错误消息:SignalR:连接尚未完全初始化。使用.start().done()或.start().fail()在连接启动后运行逻辑。
我做错了什么?

你是否添加了 start().fail() 来查看初始化是否因某些原因失败了? - Ron Beyer
@RonBeyer 我已经添加了,但是它仍然报相同的错误。 - Aaron Gates
2个回答

5

试试这个:

$.connection.hub.start().done(function () { 
    alert('signalR started');  
    hub.server.testConnection("hello signalR").done(function () { });
});

在服务器端:
Clients.All.testConnection(message);

使用hub.server中的函数必须在连接启动后调用。

在您的示例中,JavaScript代码正在运行,但是hub连接尚未完成启动,因此您将其放入.done()回调函数中。


谢谢,兄弟。All 部分不是必需的,但 JS 修复了问题。我之前已经尝试过一次,但没有添加 .fail 语句,所以可能与此有关。不确定。 - Aaron Gates
不需要失败语句。所有部分都指定要传输给所有连接的人。 - Ndy

1
这可能并不能解决问题,但你应该从C#方法中调用testMessage,而不是testConnection。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接