You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Blazor Auto渲染模式:WASM下载后能否立即断开WebSocket?

在Blazor Auto渲染模式下WASM就绪后主动断开SignalR连接

要实现WASM下载完成后立即断开原SignalR连接,避免出现重连提示,可通过以下步骤操作:

1. 监听WASM加载完成事件

Blazor在WebAssembly模块加载完成后会触发blazor.webassembly.loaded JavaScript事件,可利用该事件触发断开连接的逻辑。

2. 实现.NET端断开连接逻辑

首先在客户端组件中注入HubConnection(针对框架内置的Blazor SignalR连接),并创建一个可被JavaScript调用的服务类:

using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.JSInterop;

public class SignalRConnectionManager
{
    private readonly HubConnection _hubConnection;

    public SignalRConnectionManager(HubConnection hubConnection)
    {
        _hubConnection = hubConnection;
    }

    [JSInvokable("DisconnectBlazorSignalR")]
    public async Task DisconnectAsync()
    {
        if (_hubConnection.State == HubConnectionState.Connected)
        {
            await _hubConnection.StopAsync();
            await _hubConnection.DisposeAsync();
        }
    }
}

在Program.cs客户端配置中注册服务及内置Blazor SignalR连接:

builder.Services.AddScoped<SignalRConnectionManager>();
builder.Services.AddScoped(sp =>
{
    var navigationManager = sp.GetRequiredService<NavigationManager>();
    return new HubConnectionBuilder()
        .WithUrl(navigationManager.ToAbsoluteUri("/_blazor"))
        .Build();
});

3. 在JavaScript中触发断开操作

在wwwroot/index.html中添加脚本,监听WASM加载完成事件并调用.NET方法:

<script>
window.addEventListener('blazor.webassembly.loaded', async () => {
    try {
        await DotNet.invokeMethodAsync('你的应用程序集名称', 'DisconnectBlazorSignalR');
        console.log("WASM加载完成,已断开Blazor SignalR连接");
    } catch (err) {
        console.error("断开SignalR连接失败:", err);
    }
});
</script>

4. 可选:通过组件验证渲染模式(Blazor 8+)

若需精准判断是否切换到WASM渲染模式,可在组件的OnAfterRenderAsync中添加逻辑:

@inject SignalRConnectionManager ConnectionManager
@inject IRenderModeProvider RenderModeProvider

@code {
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender && RenderModeProvider.CurrentRenderMode == RenderMode.WebAssembly)
        {
            await ConnectionManager.DisconnectAsync();
        }
    }
}

注:早期版本可通过OperatingSystem.IsBrowser()判断是否处于WASM环境。

以上操作会在WASM加载完成并切换到WebAssembly渲染模式时,主动断开原SSR SignalR连接,大幅降低重连提示出现的概率。

内容的提问来源于stack exchange,提问作者SugarCoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:40:13