在SignalR转换问题中,调用特定客户端(使用Invoke)失败

时间:2013-04-18 18:58:40

标签: signalr

有人可以解释为什么第二次电话(对个人客户)无效吗?

IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<SymHubGrid>();

((ClientProxy)(hubContext.Clients.All)).Invoke(method, msg);   // OK

((ClientProxy)(hubContext.Clients.Client(hubConnID))).Invoke(method, msg);  // FAIL

失败,但有以下例外:
{Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法将类型'Microsoft.AspNet.SignalR.Hubs.ConnectionIdProxy'转换为'Microsoft.AspNet.SignalR.Hubs.ClientProxy

它与我之前的post相关联。

由于

2 个答案:

答案 0 :(得分:1)

您无需将其强制转换为ClientProxy即可调用Invoke。 hubContext.Clients.All.Invoke(method,msg)就是你所需要的。实际上,你根本不需要调用,只需要hubContext.Clients.All.method(msg);

答案 1 :(得分:1)

Oeps - 找到答案 - 我需要转发到IClientProxy - 而不是实际的代理!

感谢此post中的halter73:

它的工作原理如下:(注意IClientProxy!)

IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<SymHubGrid>();

((IClientProxy)(hubContext.Clients.All)).Invoke(method, infoDown);

((IClientProxy)(hubContext.Clients.Client(hubConnID))).Invoke(method, infoDown);