1

谁能解释一下为什么第二个电话(给单个客户)无效?

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”

它与我之前的帖子有关。

谢谢

4

2 回答 2

2

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

感谢这篇文章中的halter73 :

它像这样工作正常:(注意 IClientProxy!)

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

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

((IClientProxy)(hubContext.Clients.Client(hubConnID))).Invoke(method, infoDown);
于 2013-04-18T20:00:05.013 回答
1

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

于 2013-04-18T19:18:12.253 回答