【问题标题】:Connection must be started before data can be sent. Call .start() before .send()必须先启动连接,然后才能发送数据。在 .send() 之前调用 .start()
【发布时间】:2015-06-03 23:58:17
【问题描述】:

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

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()里面的代码不执行

【问题讨论】:

    标签: asp.net signalr


    【解决方案1】:

    推荐阅读:Connection Lifetime Events in SignalR

    这是我对正在发生的事情的理论。您可以通过打开客户端日志记录来确认它 - 在 start() 调用之前添加 $.connection.hub.logging = true;

    1. 和 3. 连接可能启动正常 - 正如您所说 此代码工作正常,但一段时间后...。出于同样的原因,.fail() 不会被执行。

    但在建立连接后,可能会出现短暂或较长的断开连接。客户端尝试重新连接一段时间(断开连接超时),如果不成功,它将放弃,您需要再次调用.start()(例如在disconnected 处理程序中)。

    1. 通过处理“断开连接”事件

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

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多