Контекстный концентратор SignalR из веб-приложения не вызывает метод клиента (консольного приложения) - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь вызвать метод консольного приложения из контекста SignalR HUB, который не работает-

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

Это (другая функция ниже) работает нормально, так как клиент сам является веб-страницей (я думаю),

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

Но когда я пытаюсь вызвать метод из другого клиента (консольное приложение), Контекст концентратора не вызывает его.

Работает ли контекст Концентратора для клиентов вне приложения-концентратора.

Редактировать:

Метод в 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 голосов
/ 12 декабря 2018

Вам необходимо вызвать метод Start() соединения с концентратором после настройки обратного вызова на прокси.

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

Затем использовать единственный параметр в вашем обратном вызове.Оберните 2 имеющихся параметра в один класс / объект.

Кроме того, убедитесь, что имя концентратора в вашем вызове CreateHubProxy является допустимым, то есть имя концентратора SignalR в приложении ASP.net.(в вашем случае MyHub).

...