首页 > 解决方案 > 如何找到打字稿signalR的onDisconnect方法

问题描述

我有一个使用 signalR 库的 Angular 客户端"@aspnet/signalr": "^1.1.4"

我只需要它来接收来自 ASP.net 服务器的通知。所以我构建并启动 hubConnection , private hubConnection: signalR.HubConnection;然后订阅来自服务器的不同消息

this.hubConnection.on("SomeMessage", (data: MyDto) =>
  myActions()
);

一切正常并接收消息,但经过几个小时的工作后发生了一些事情(我想是网络)并且在服务器上触发方法

public override async Task OnDisconnectedAsync(Exception e)

这很好,但我想在客户端处理断开连接。我阅读了这个这个以及更多的答案,但我hubConnection 没有这些答案中提到的disconnect方法或属性。hub所以我会很感激他们可能在哪里的任何提示。最好在打字稿中,而不是在 html 中。

更新

好吧,正如建议的那样,我将 signalR 包更改为"@microsoft/signalr": "^5.0.4"by I still can't find onDisconnectevent

我构建了一个实例,signalR.HubConnection如下所示

  private buildConnection(url: string, token: string) {
      this.hubConnection = new signalR.HubConnectionBuilder()
      .withUrl(url, { accessTokenFactory: () => token })
      .build();
  }

但是这个实例没有 onDisconnect 事件。

标签: angulartypescriptsignalr

解决方案


正如所评论的,升级到较新的版本,它现在有一个 OnDisconnect 事件和一种在客户端访问原因的方法。

SignalR 2.1 向服务器 OnDisconnect 事件添加了一个过载,该事件指示客户端是否故意断开连接而不是超时。如果客户端显式关闭连接,则 StopCalled 参数为 true。在 JavaScript 中,如果服务器错误导致客户端断开连接,错误信息将作为 $.connection.hub.lastError 传递给客户端。

$.connection.hub.disconnected(function () {
    if ($.connection.hub.lastError) 
        { alert("Disconnected. Reason: " +  $.connection.hub.lastError.message); }
});

参考文档 - https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/handling-connection-lifetime-events#detecting-the-reason-for-a-disconnection


推荐阅读