Web应用程序的SignalR集线器上下文未调用客户端(控制台应用程序)方法

时间:2018-12-12 07:28:51

标签: asp.net signalr signalr-hub

我正在尝试从SignalR HUB上下文中调用控制台应用程序方法,该方法不起作用-

 var hubContext = GlobalHost.ConnectionManager.GetHubContext<Hubsfile.MyHub>();
hubContext.Clients.All.SendControl(machine, code);

这个(下面的另一个功能)工作正常,因为客户端就是网页本身(我认为)。

  

hubContext.Clients.All.registerCard(ip,data);

但是当我尝试调用来自不同客户端(控制台应用程序)的方法时,Hub上下文未调用它。

中心上下文对中心应用程序外部的客户端不起作用。

编辑:

SignalR HUB中的方法:

public void SendControlKeys(string machine, string code)
    {
        Clients.All.SendControl(machine, code);
    }

控制台客户端中的方法:

  proxy.On<string, string>("SendControl", (ip, data) =>
            {
                Console.WriteLine("server called SendControl");
                Console.WriteLine();
                byte[] dataBytes = HexEncoding.GetBytes(data, out int i);
                try
                {
                    lock (Clients)
                    {
                        if (Clients.Count > 0)
                        {
                            foreach (KeyValuePair<string, StateObject> client in Clients)
                            {
                                if (isClientConnected(client.Value.workSocket))
                                {
                                    if (client.Key == ip)
                                    {
                                        Send(client.Value.workSocket, dataBytes);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            });

1 个答案:

答案 0 :(得分:1)

在代理上设置回调之后,您需要调用集线器连接的Start()方法。

var proxy = con.CreateHubProxy("name");
proxy.On<T>(...);
con.Start().Wait();

然后,在回调中使用单个参数。将您拥有的2个参数包装到单个类/对象中。

除此之外,请确保CreateHubProxy调用中的集线器名称有效,即ASP.net应用程序中的SignalR集线器名称(在您的情况下为MyHub)。