【问题标题】:Asp.Net Core SignalR on Blazor Server-Side never calls OnDisconnectedAsyncBlazor 服务器端上的 Asp.Net Core SignalR 从不调用 OnDisconnectedAsync
【发布时间】:2020-07-30 12:24:13
【问题描述】:

我创建了一个基本的 Blazor 服务器端聊天,但从不调用 OnDisconnectedAsync,即使关闭浏览器,连接也会保持活动状态。

OnDisconnectAsync 方法在 ChatHub.cs 中:

public override async Task OnDisconnectedAsync(Exception exception)
    {
        Debug.WriteLine("Disconnected");
    }

如果改用 Blazor WebAssembly,则相同的代码可以工作。 我不明白这是一个错误还是我遗漏了什么。

【问题讨论】:

    标签: signalr blazor blazor-server-side asp.net-core-signalr


    【解决方案1】:

    我知道为什么没有调用 OnDisconnectAsync,解决方案是 Steve Sanderson 从我在 GitHub 上打开的问题中给出的:

    https://github.com/dotnet/aspnetcore/issues/20932#event-3245802796

    Blazor 服务器释放连接,但不释放必须手动释放的 HubConnection。由于 Blazor 不支持 IAsyncDisposable,因此不会等待对 DisposeAsync 的调用,也不得等待 DisposeAsync:

    @implements IDisposable
    
    ... rest of component code ...
    
    @code {
        public void Dispose()
        {
            _hubConnection.DisposeAsync();
        }
    }
    

    这不仅适用于 Blazor 服务器。如果 Blazor WebAssembly 上的集线器连接位于单个组件中,则它也必须被释放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 2020-09-30
      • 2019-04-19
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多