.net SignalR断开连接未立即触发

kknvjkwl  于 2023-02-17  发布在  .NET
关注(0)|答案(1)|浏览(233)

我尝试用重新连接来处理断开连接错误,所以我使用nextRetryDelayInMilliseconds方法来重新连接,但是在本例中,如果连接丢失或者连接有一些问题,onclose处理程序就不起作用。
我正在使用“@microsoft/signalr”:Angular 项目中的“^7.0.2”包
我使用了“withAutomaticReconnect”选项,但它没有立即触发。我在超时后得到一个回调。
连接构建器:

this.hubconnection = new HubConnectionBuilder()
  .withUrl(url)
  .withAutomaticReconnect({
    nextRetryDelayInMilliseconds: () => {
      this._errorState$.next(true);
      return 1000;
    }
  })
  .build();

错误处理程序(如果使用“withAutomaticReconnect”则不会触发):

this.hubConnection.onclose(error => callback(error)

当出现一些与连接相关的错误时,期望立即处理错误。

ct2axkht

ct2axkht1#

经过测试,我发现正确的格式应该像下面.

connection.onclose(() => {
    
});

在您的方案中,代码应该是

this.hubConnection.onclose((error) => {
    console.error(`Something went wrong: ${error}`);
});

测试后,如果重启signalr服务器,可能不会得到错误信息,这应该是正常的,不知道在生产环境中能不能看到更多,这是标准用法,也可以参考下面的链接。
onclose event in signalr client

建议:

1.上面的测试我在signalr javascript客户端中测试,我也重现了这个问题,如果它不起作用,请使用@microsoft/signalr 7.0.0版本来解决新版本引起的问题。
1.我还使用reconnectDelay属性时,建立连接.

var connection = new signalR.HubConnectionBuilder().withUrl("/mainHub")
 .withAutomaticReconnect({
     nextRetryDelayInMilliseconds: () => {
         this._errorState$.next(true);
         return 1000;
     },
     reconnectDelay: 500 // set the reconnect delay to 500ms
 })
 .configureLogging(signalR.LogLevel.Trace).build();

相关问题