Blazor服务器端的Asp.Net核心SignalR从不调用OnDisconnectedAsync



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

OnDisconnectAsync方法位于ChatHub.cs:内部

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

如果使用Blazor WebAssembly,同样的代码也会起作用。我不明白这是一个bug还是我遗漏了什么。

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

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

Blazor服务器处理连接,但不处理必须手动处理的HubConnection。由于Blazor不支持IAsyncDisposable,因此不会等待对DisposeSync的调用,也不能等待DisposeSync:

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

这不仅仅适用于Blazor服务器。如果Blazor WebAssembly上的集线器连接位于单个组件中,则也必须对其进行处理。

相关内容

  • 没有找到相关文章

最新更新