SignalR连接后收不到服务器推送的消息怎么办?

UE丶秋花 阅读 3

我在Vue项目里集成SignalR,连接能成功建立,但服务器发消息时前端完全没反应,控制台也没报错。是不是监听方法写错了?

我用的是@microsoft/signalr包,连接代码如下:

<script setup>
import { HubConnectionBuilder } from '@microsoft/signalr'

const connection = new HubConnectionBuilder()
  .withUrl('https://localhost:5001/chatHub')
  .build()

connection.start().then(() => {
  console.log('Connected!')
})

// 这里注册了监听,但从来没触发过
connection.on('ReceiveMessage', (user, message) => {
  console.log(user, message)
})
</script>
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
爱学习的芸倩
我碰到过类似问题,大概率是事件名称对不上。先检查这几个地方:

第一,确认服务器端hub的方法名。SignalR事件名是区分大小写的,检查下服务器端是不是真的叫ReceiveMessage而不是receiveMessage之类的。最好让后端同事把他们的Hub方法定义发你看看。

第二,把连接监听提前到start()之前。有时候异步问题会导致监听注册晚了:


const connection = new HubConnectionBuilder()
.withUrl('https://localhost:5001/chatHub')
.build()

// 先注册监听再启动
connection.on('ReceiveMessage', (user, message) => {
console.log('终于收到了:', user, message)
})

connection.start().then(() => {
console.log('Connected!')
})


第三,加个错误处理看看有没有隐藏问题:


connection.onclose(error => {
console.error('连接挂了:', error)
})


如果还不行,可能是跨域问题。检查下服务器端CORS配置,确保允许了SignalR的请求头和后端地址。这个点坑过我两次,每次都要花半小时才想起来。
点赞
2026-03-10 13:03