如何在Blazor服务端应用中连接Owin自托管的.NET Framework SignalR Hub
问题解决方案
核心原因
你遇到的是ASP.NET SignalR(.NET Framework版)和ASP.NET Core SignalR的协议不兼容问题:
- Blazor服务端默认使用的
Microsoft.AspNetCore.SignalR.Client是ASP.NET Core生态的SignalR客户端,无法连接.NET Framework Owin托管的旧版SignalR Hub - 你之前.NET Framework中用的
HubConnection属于旧版ASP.NET SignalR的客户端API,两者协议、交互逻辑完全不同,不是填写正确URL就能直接连通的
可行方案1(服务端无需改动,推荐)
直接在Blazor服务端项目中使用兼容旧版SignalR服务端的客户端包即可:
- 卸载项目中现有的
Microsoft.AspNetCore.SignalR.Client相关包 - 安装NuGet包
Microsoft.AspNet.SignalR.Client(最新版支持.NET Standard 2.0,可正常运行在Blazor服务端环境) - 连接逻辑和你.NET Framework端的写法完全一致,示例代码如下:
// 注意引用命名空间 Microsoft.AspNet.SignalR.Client var hubConnection = new HubConnection("http://localhost:8081/"); var testHubProxy = hubConnection.CreateHubProxy("MyHub"); // 示例:注册服务端推送的消息接收方法 testHubProxy.On<string>("YourMessageMethod", receiveMsg => { // 你的业务处理逻辑 }); // 启动连接 await hubConnection.Start();
可行方案2(客户端无需改动,需要修改服务端)
如果你坚持要使用ASP.NET Core SignalR客户端,需要将.NET Framework端的SignalR Hub迁移为ASP.NET Core SignalR实现,重新托管后再使用Blazor默认的HubConnectionBuilder连接,此时URL填写格式为http://localhost:8081/你的Hub路由。
额外注意事项
如果Blazor应用和SignalR服务端存在域名/端口差异,需要在Owin托管的SignalR服务端配置CORS规则,允许Blazor应用的来源域名跨域访问,同时允许携带凭证。
内容的提问来源于stack exchange,提问作者Dushman
相关产品推荐
相关产品推荐

