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

SignalR C#客户端无法接收消息,Javascript客户端可正常接收

SignalR C#客户端无法接收消息排查求助

我在Windows上运行一个C# .NET SignalR Hub,此前用Javascript客户端测试一切正常,但对应的C#客户端无法接收消息。

环境与Hub信息

  • Hub使用WebSockets协议,会拒绝不包含WebSocket Upgrade请求头的连接;
  • 采用HTTPS协议并使用自签名证书;
  • Hub包含基础连通性检查方法,会向客户端回显纯文本测试消息,功能类似AspNetCore ChatHub示例应用。

客户端表现对比

  • Javascript客户端:无论服务器托管在Visual Studio还是Windows Server 2019的IIS上,均可正常连接、发送和接收消息;
  • C#客户端:可通过HTTPS正常连接(已忽略自签名证书校验),连接状态显示为Connected;发送的测试消息可在服务器日志中看到,但无法接收回显响应,客户端和服务器均无异常抛出。已排查方法名拼写问题,确认无错误。

代码对比

正常运行的Javascript客户端代码

connection.on("TestMessage", function (msg)
{
    logMsg("TestMessage: " + msg);
});

C#客户端对应代码(处理器从未被调用,已在hubConnection.StartAsync()前配置)

this.hubConnection.On<string, string>("TestMessage", (user, message) =>
{
    var newMessage = $"{user}: {message}";
    this.Log(newMessage);
});

排查方向建议

  • 参数不匹配:JS客户端的TestMessage仅接收1个参数,但C#客户端注册的是接收2个参数。Hub端发送TestMessage时的参数数量和类型必须与客户端注册的完全一致,C#作为强类型语言,参数不匹配会直接跳过回调执行,这是最可能的原因。
  • 方法名大小写校验:虽然SignalR默认大小写不敏感,但如果自定义了协议配置,可能存在严格匹配的情况,确认Hub端发送消息的方法名与客户端注册的完全一致。
  • 开启客户端详细日志:添加日志配置查看消息接收细节,确认客户端是否收到消息及未触发回调的原因:
    hubConnection.LogLevel = Microsoft.Extensions.Logging.LogLevel.Trace;
    hubConnection.LoggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    
  • 验证WebSocket连接稳定性:虽然连接状态显示Connected,但可通过日志或工具确认WebSocket连接是否真的处于正常通信状态,排除自签名证书对消息传输的隐性影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:35:25