1

在我的 signalR js 客户端上处理连接生命周期事件时遇到问题。我在客户端上使用aspnet/signalr-client npm 库,在 asp.net 核心服务器上使用 microsoft.aspnetcore.signalr 库。

问题是

当我关闭服务器(alt + F4)时,客户端方法onClosed(error)被触发,我想要的是,它在文档中是如何描述的,该onReconnecting()方法被触发并且客户端尝试重新连接。我已经尝试忽略此问题并在该onClosed(error)方法中建立新连接,但随后出现Uncaught (in promise) Error: Cannot start a connection that is not in the 'Initial' state.错误。

我的问题是

为什么该onClosed(error)方法被触发并且客户端不尝试重新连接,我该如何解决这个问题?

澄清代码:

客户

var connection = new signalR.HubConnection('http://localhost:8956/testhub');
connection.on('onStart', function() {
    console.log('onStart');
  });

  connection.on('onEnd', function() {
    console.log('onEnd');
  })

  console.log('connection=', connection);

  connection.onClosed = function(error) {   // this gets fired
    console.log('connection closed');
    //setTimeout(function() {
    //  connection.start();
    //}, 10000);
  }

  connection.onReconnecting = function() {   // this not
    console.log('trying to reconnect');
  }

  connection.start();

服务器集线器“TestHub”

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;


namespace SignalRCoreConsole.Hubs
{
    class TestHub : Hub
    {
        public void Start()
        {
            Clients.All.InvokeAsync("onStart");
            Console.WriteLine("TestHub: Start");
        }

        public void End()
        {
            Clients.All.InvokeAsync("onEnd");
            Console.WriteLine("TestHub: End");
        }

        public override Task OnDisconnectedAsync(Exception exception)
        {
            Console.WriteLine("client disconnected");
            return base.OnDisconnectedAsync(exception);
        }

        public override Task OnConnectedAsync()
        {
            Console.WriteLine("client connected");
            return base.OnConnectedAsync();
        }
    }
}
4

1 回答 1

2

SignalR for Asp.NET Core 没有重新连接。您onReconnecting在文档中查找了先前版本的 SignalR,但新版本中不再存在该功能。看看描述两者之间更大的重大变化的公告。

于 2017-09-27T17:23:12.007 回答