SignalR使用ISingleClientProxy.InvokeAsync传参并获取返回值报错求助
解决SignalR客户端带参数响应InvokeAsync报错的问题
问题原因
服务端通过InvokeAsync<T>调用客户端方法并等待响应时,客户端需要注册返回Task<T>类型的处理方法。你当前的代码因为编译器匹配到了void返回类型的On重载,导致返回值的操作触发报错。
解决方案
方法1:使用OnAsync(推荐,适用于.NET 6+ SignalR客户端)
OnAsync方法更明确地支持异步返回值,直接指定参数类型和返回类型:
this.hubConnection.OnAsync<string, string>("Test", async (prefix) => { return $"{prefix}Successful"; });
如果是同步逻辑,可简化为:
this.hubConnection.OnAsync<string, string>("Test", (prefix) => { return Task.FromResult($"{prefix}Successful"); });
方法2:指定On方法的返回类型(适用于旧版本SignalR客户端)
明确告诉编译器客户端方法返回Task<string>,避免匹配到void重载:
this.hubConnection.On<string, Task<string>>("Test", (prefix) => { return Task.FromResult($"{prefix}Successful"); });
验证服务端代码
服务端的调用代码无需修改,保持原逻辑即可:
return await Clients.Client(connectionInfo.ConnectionId).InvokeAsync<string>("Test", "Prefix", default);
内容的提问来源于stack exchange,提问作者Steve Borman
相关产品推荐
相关产品推荐

