Blazor WASM客户端能否对接.NET Framework WCF服务端的SignalR?
Blazor WASM对接.NET Framework端AspNet.SignalR的可行折中方案
核心前提:AspNet.SignalR(.NET Framework版)和AspNetCore.SignalR(.NET Core/.NET 5+版)底层通信协议完全不兼容,无法直接互通,所有方案都需要做协议适配
方案1:通过Blazor JS互操作调用ASP.NET SignalR官方JS客户端,改造成本最低,无需修改原有服务端代码
- 在Blazor WASM项目的
wwwroot/index.html中引入与服务端AspNet.SignalR版本匹配的官方JS客户端脚本 - 封装JS侧逻辑,实现SignalR连接建立、消息发送、服务端事件监听的能力
- Blazor C#代码通过
IJSRuntime调用封装好的JS方法,同时注册回调方法接收JS侧转发的服务端推送消息即可
该方案完全复用了成熟的官方JS适配能力,仅需在Blazor端做少量适配工作,适合绝大多数轻量场景
- 在Blazor WASM项目的
方案2:搭建轻量SignalR协议中转代理服务,适合消息逻辑复杂、不想在前端编写JS代码的场景
- 搭建一个独立的ASP.NET Core服务作为中转层,同时引入两个NuGet包:
Microsoft.AspNetCore.SignalR(用于对接Blazor WASM客户端)、Microsoft.AspNet.SignalR.Client(用于对接原有.NET Framework 4.7的SignalR服务端) - 在中转服务内部实现双向消息转发逻辑:收到Blazor端发来的请求后直接转发到老SignalR服务端,收到老SignalR服务端的推送后转发给对应的Blazor客户端
该方案下Blazor端可以完全使用原生的AspNetCore.SignalR C#客户端开发,无需处理JS交互逻辑,中转服务本身逻辑非常轻量,不需要做复杂的业务处理,仅做消息透传即可
- 搭建一个独立的ASP.NET Core服务作为中转层,同时引入两个NuGet包:
注意:如果存在跨域请求场景,需要提前在.NET Framework服务端配置对应的CORS规则,允许Blazor WASM的域名访问SignalR接口
内容的提问来源于stack exchange,提问作者Alex Ivan
相关产品推荐
相关产品推荐

