必须先启动连接,然后才能发送数据。 .send()之前调用.start()

时间:2015-06-03 05:33:55

标签: asp.net signalr

我有以下代码从客户端页面调用集线器上的方法

var app = $.connection.myHub;    
$.connection.hub.start().done(function () {         
            $('#mylink').click(function (e) {
                e.preventDefault();

                app.server.myMethod();
            });
    ).fail(function (error) {
            console.log('Invocation of start failed. Error: ' + error)
        });

此代码工作正常但经过一段时间后,当我再次单击该链接时,出现以下错误

SignalR: Connection must be started before data can be sent. Call .start() before .send()
  1. 链接点击事件已在start().done()内部,因此如果未启动连接,如何触发链接点击的事件处理程序。

  2. 如果这是因为连接超时,我该如何处理异常并将用户重定向到登录页面。

  3. 为什么.fail()内的代码不会执行

1 个答案:

答案 0 :(得分:3)

推荐阅读:Connection Lifetime Events in SignalR

这是我关于发生什么事的理论。您可以通过启用客户端日志记录进行确认 - 在$.connection.hub.logging = true;调用之前添加start()

  1. 和3.连接可能已经开始了 - 就像你说这段代码工作正常但是过了一段时间...... 。出于同样的原因,.fail()未执行。
  2. 但是在建立连接后,可能会有短暂或更长的断开连接。客户端正在尝试重新连接一段时间(断开连接超时),如果不成功,它将放弃,您需要再次调用.start()(例如,在disconnected处理程序中)。

    1. 通过处理'已断开连接'事件

      $。connection.hub.disconnected(function(){});