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

如何在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服务端的客户端包即可:

  1. 卸载项目中现有的Microsoft.AspNetCore.SignalR.Client相关包
  2. 安装NuGet包 Microsoft.AspNet.SignalR.Client(最新版支持.NET Standard 2.0,可正常运行在Blazor服务端环境)
  3. 连接逻辑和你.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:18:04