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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:36:00