将 1.x 的 onDisconnected() 方法处理到 SignalR 2.1.2

本文关键字:处理 SignalR 方法 onDisconnected | 更新日期: 2023-09-27 18:33:12

我之前在 Asp.Net-MVC项目中实现了信号R 1.1.3版本,但现在我需要用最新版本更新信号R版本,它是信号R 2.1.2,在信号R 2.1.2内部,问题是它在集线器类中不支持onDisconnected()方法。 所以我可以在我的项目中处理信号 R 的连接事件。

将 1.x 的 onDisconnected() 方法处理到 SignalR 2.1.2

在版本 2.x 中,连接事件返回 Task 采用 bool stopCalled 的输入参数。 你只需要更新你的方法来返回任务,这是由base返回的。打开已断开连接(停止调用)。

文档

public override Task OnDisconnected(bool stopCalled)
{
    // Add your own code here.
    // For example: in a chat application, mark the user as offline, 
    // delete the association between the current connection id and user name.
    return base.OnDisconnected(stopCalled);
}

编辑

我相信当前的 SignalR 文档实际上可能错误地建议您使用没有 bool stopCall 参数的 OnDisconnected()。 但是,查看 HubBase 的源代码(Hub 继承自),您可以找到在 2.x 中声明如下的 OnDisconnected 方法。

/// <summary>
/// Called when a connection disconnects from this hub gracefully or due to a timeout.
/// </summary>
/// <param name="stopCalled">
/// true, if stop was called on the client closing the connection gracefully;
/// false, if the connection has been lost for longer than the
/// <see cref="Configuration.IConfigurationManager.DisconnectTimeout"/>.
/// Timeouts can be caused by clients reconnecting to another SignalR server in scaleout.
/// </param>
/// <returns>A <see cref="Task"/></returns>
public virtual Task OnDisconnected(bool stopCalled)
{
    return TaskAsyncHelper.Empty;
}