05-常见问题
常见问题
Q: 连接 SignalR Hub 失败?
- 可能原因:
- URL 中路径不正确(需要匹配
/hubName) - 服务端未启用 WebSocket 传输
- 服务端要求认证但未提供 Token
- 排查步骤:
- 在浏览器中测试:打开开发者工具 → 控制台,执行:
const c = new signalR.HubConnectionBuilder() .withUrl("http://localhost:5000/chatHub") .build(); c.start().then(() => console.log('connected')); - 检查服务端日志
Q: 发送调用后收到 "Unknown method"?
原因:方法名大小写不匹配。
解决:SignalR 方法名区分大小写,确保与 Hub 中定义的方法名完全一致。
Q: 消息显示中有 \x1E 字符?
正常现象。\x1E 是 SignalR 协议的消息分隔符。程序在 Hex 模式下会显示该字符。在文本模式下,程序自动过滤分隔符。
Q: 和 WebSocket 直接连接有什么不同?
- NexSignalR 在 WebSocket 的基础上添加了:
- SignalR 握手协议
- JSON Hub 协议封装
- 方法订阅管理
- 消息类型识别
这些额外功能使得 SignalR 更适合 ASP.NET Core 的实时通信场景。如果只需要收发原始 WebSocket 消息,使用标准 WebSocket 客户端即可。
Q: 支持 Azure SignalR Service 吗?
Azure SignalR Service 使用标准的 SignalR 协议,可以通过客户端模式连接。但可能需要认证 Token,当前版本暂不支持 Token 认证。
Q: 支持 MessagePack 协议吗?
当前仅支持 JSON Hub 协议("protocol":"json")。MessagePack 二进制协议暂不支持。
Q: 服务端模式下如何广播给所有客户端?
当前服务端模式下发送消息是针对单个选中客户端的。如需广播,需要分别选中每个客户端并发送。