Asp. Net Core SignalR на стороне сервера Blazor никогда не вызывает OnDisconnectedAsync - PullRequest
0 голосов
/ 17 апреля 2020

Я создал базовый c серверный чат Blazor, но OnDisconnectedAsyn c никогда не вызывается, соединение остается активным, даже когда браузер закрыт. Я создал репо здесь с минимальным воспроизводимым примером:

https://github.com/francescocristallo/BlazorAppServerChat

Метод OnDisconnectAsyn c находится внутри ChatHub.cs:

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

Тот же код работает, если вместо этого используется Blazor WebAssembly. Я не могу понять, если это ошибка или я что-то упускаю.

1 Ответ

0 голосов
/ 18 апреля 2020

Я выяснил, почему не был вызван OnDisconnect:

Сервер Blazor удаляет соединение, но не HubConnection, который должен быть удален вручную. Поскольку Blazor не поддерживает IAsyncDisposable, вызов DisposeAsyn c не ожидается, а также не следует ожидать DisposeAsyn c:

@implements IDisposable

... rest of component code ...

@code {
    public void Dispose()
    {
        _hubConnection.DisposeAsync();
    }
}

Это не только для Blazor Server. Соединения-концентраторы в Blazor WebAssembly также должны быть удалены, если они находятся в одном компоненте.

...