Blazor Server App使用WebRTC推流时在Edge浏览器出现404错误求助
问题分析与解决办法
可能原因
- Edge浏览器对WebRTC权限或缓存的处理逻辑与Chrome/Firefox存在差异,旧缓存或权限异常导致SignalR连接中断
- IIS的URL重写规则拦截了Blazor Server的SignalR核心端点
/_blazor,在Edge下返回404 - Edge的隐私安全设置(如Tracking Prevention、增强安全模式)阻断了SignalR长连接,而WebRTC推流为P2P模式不受影响,因此后台仍在运行
- Blazor Server的Circuit配置超时,推流时的资源占用触发Circuit断开,Edge的重连机制未正确处理导致404
解决步骤
1. 修复Edge浏览器层面问题
- 清除站点缓存与数据:打开Edge设置 → 隐私、搜索和服务 → 清除浏览数据,勾选「缓存的图像和文件」「Cookie和其他站点数据」,选择目标站点后清除
- 重新授权屏幕共享权限:点击地址栏左侧锁图标,检查「屏幕共享」权限是否为「允许」,若异常则重新授权
- 调整安全设置:
- 降低Tracking Prevention级别至「基本」(设置 → 隐私、搜索和服务 → Tracking Prevention)
- 关闭「增强安全模式」(设置 → 隐私、搜索和服务 → 增强安全模式)
2. 检查IIS配置
- 启用WebSocket协议:打开服务器管理器 → Web服务器 → 添加角色和功能,确保「WebSocket协议」已安装(Blazor Server依赖WebSocket维持长连接)
- 排除SignalR端点的URL重写规则:在站点的web.config中添加以下规则,避免
/_blazor被拦截:
<rewrite> <rules> <rule name="Allow Blazor SignalR" stopProcessing="true"> <match url="^_blazor" /> <action type="None" /> </rule> </rules> </rewrite>
3. 优化Blazor Server配置
- 调整Circuit超时参数:在Program.cs中修改Circuit配置,延长断开保留时间与JS互操作超时:
builder.Services.AddServerSideBlazor() .AddCircuitOptions(options => { options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(5); options.JSInteropDefaultCallTimeout = TimeSpan.FromSeconds(30); });
- 分离WebRTC与Blazor主线程:将WebRTC推流逻辑移至Web Worker中,避免占用Blazor Circuit线程导致连接中断
4. 调试定位细节
- 打开Edge开发者工具(F12)→ 网络标签,筛选「WebSocket」和「XHR」,查看推流时
/_blazor请求的具体状态与错误信息 - 查看IIS日志:在
%SystemDrive%\inetpub\logs\LogFiles目录下找到对应站点的日志,分析404请求的路径与触发原因
内容的提问来源于stack exchange,提问作者Sandwich
相关产品推荐
相关产品推荐

