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

使用ASP.NET Core SignalR连接失败,报错Promise选项需为Promise

分析你的SignalR连接问题及修复方案

看起来你在使用ASP.NET Core SignalR客户端时踩了几个常见的坑,咱们一步步拆解问题:

核心错误点

  • HubConnection初始化方式错误:ASP.NET Core SignalR的客户端不再直接使用new signalR.HubConnection(),而是需要通过HubConnectionBuilder来构建连接,这是和旧版SignalR最大的区别之一。
  • 错误使用invoke方法:invoke是用来调用服务器Hub中定义的具体方法,而不是用来获取Hub实例的。你这里写的connection.invoke("LogNotifierHub")完全搞错了用途——"LogNotifierHub"是你的Hub类名,不是方法名,这行代码完全多余,应该删掉。
  • start方法的参数错误:ASP.NET Core SignalR已经移除了对JSONP的支持,而且start()方法不需要传入{ jsonp: true }这样的选项,它本身返回一个Promise,这也是你报错"The 'promise' option must be a Promise"的直接原因。

修复后的完整代码

// 正确构建HubConnection
const hubUrl = "http://localhost:52273/logNotifierHub";
const connection = new signalR.HubConnectionBuilder()
    .withUrl(hubUrl)
    // 可选:添加日志配置方便调试
    // .configureLogging(signalR.LogLevel.Information)
    .build();

// 注册服务器推送的事件处理
connection.on("streamStarted", function () {
    startStreaming();
});

// 启动连接并处理Promise状态
connection.start()
    .then(() => console.log("SignalR连接成功!"))
    .catch(err => console.error("连接失败:", err));

// 若需调用服务器Hub的具体方法(示例)
// connection.invoke("StartLogStream")
//     .catch(err => console.error(err));

额外注意事项

  • 版本匹配:确保你使用的SignalR客户端库版本和服务器端的ASP.NET Core版本完全一致,版本不匹配很容易引发各种奇怪的错误。
  • CORS配置:如果前端和服务器不在同一域名下,一定要在服务器端正确配置CORS,允许SignalR的跨域请求(需启用WithCredentials并允许对应Origin)。
  • 错误处理:记得给start()和invoke()添加catch块,方便快速排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:30:04