【问题标题】:SignalR must call .done or .fail before logicSignalR 必须在逻辑之前调用 .done 或 .fail
【发布时间】:2016-01-31 02:31:25
【问题描述】:

我正在尝试使用 SignalR 创建一个简单的 hello world。我有一个集线器,

public class MyHub : Hub
{
    public void TestConnection(string message)
    {
        Clients.Caller.testConnection(message);
    }
}

和一个 JS 文件(使用 Angular),

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() 以查看初始化是否由于某种原因失败?
  • @RonBeyer 我添加了它,但它给出了同样的错误。

标签: javascript c# signalr


【解决方案1】:

试试这个:

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

在服务器上:

Clients.All.testConnection(message);

必须在连接启动后调用来自 hub.server 的函数。在您的示例中,javascript 正在运行,但集线器连接尚未完成启动,因此您将其放在 .done() 的回调中

【讨论】:

  • 谢谢伙计。 All 部分不是必需的,但 JS 解决了这个问题。我已经尝试过一次,但我没有添加 .fail 语句,所以也许这是相关的。不确定。
  • Fail 语句不是必需的。所有部分只是指定传输给所有连接的人。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多