SignalR客户端已注册MyMethod回调仍报无注册错误如何解决?
SignalR客户端"没有为方法注册回调"异常解决方案
- 回调注册时机错误
SignalR要求所有客户端回调必须在HubConnection.StartAsync()启动连接之前完成注册。若在连接建立成功后才执行回调注册代码,服务端推送的事件会找不到已注册的回调,直接触发该异常。 - 回调实例被GC回收
你用来接收On方法返回值的onUpdate变量如果是局部变量,所在方法执行完成后该变量会被GC标记回收,对应的回调会自动注销。需要将onUpdate声明为所在类的全局成员变量,保持引用存活直到你主动调用Dispose注销回调。 - 方法名/参数类型匹配失败
- 检查服务端调用的方法名与客户端注册的方法名字母大小写完全一致,SignalR默认对方法名匹配区分大小写,可在构建
HubConnection时添加配置关闭大小写敏感:
hubConnection = new HubConnectionBuilder() .WithUrl("你的Hub访问地址") .AddJsonProtocol(options => { options.PayloadSerializerOptions.PropertyNameCaseInsensitive = true; }) .Build();- 检查服务端传递的
entity对象与客户端Job类型的字段/属性类型、名称完全匹配,任意字段反序列化失败都会被SignalR判定为无匹配回调。
- 检查服务端调用的方法名与客户端注册的方法名字母大小写完全一致,SignalR默认对方法名匹配区分大小写,可在构建
- 连接实例冲突
确认你注册回调的Client.HubService实例,就是实际建立连接、接收服务端推送的同一个HubConnection实例,不要出现新创建了连接实例但没有重新注册回调的情况。
内容的提问来源于stack exchange,提问作者Ivan-Mark Debono
相关产品推荐
相关产品推荐

