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

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

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

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

hubContext.Clients.All.registerCard(ip, данные);

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

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

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

Метод в 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);
                }
            });

person Usha phulwani    schedule 12.12.2018    source источник
comment
Вы подключились к сигнальному концентратору из консольного клиента?   -  person reckface    schedule 12.12.2018
comment
@reckface да ... Консольный клиент отправляет данные в концентратор. С этим проблем нет. Проблема только в том, что... когда я пытаюсь вызвать этот метод консоли из моего файла control.aspx.cs(код позади), используя контекст концентратора. И этот контекст концентратора может вызывать клиентскую функцию javascript, поэтому я думаю, что синтаксической ошибки также нет. Поэтому я не знаю, где ошибка ... поскольку нет никаких исключений или ошибок, показанных в signalR или любой другой части кода.   -  person Usha phulwani    schedule 12.12.2018
comment
как называется метод в консольном приложении. Вы можете вставить подпись в свой вопрос?   -  person reckface    schedule 12.12.2018
comment
@reckface я добавил методы в вопрос для справки   -  person Usha phulwani    schedule 12.12.2018
comment
Итак, ваш proxy.Start(); // await or .Wait() вызывается после этого вызова proxy.On<T>()?   -  person reckface    schedule 12.12.2018
comment
@reckface..no... У меня есть это соединение start.wait() перед этим вызовом функции proxy.on().....con = new HubConnection("http://localhost:17263/"); proxy = con.CreateHubProxy("myHub"); Console.WriteLine("connecting to server"); con.Start().Wait(); Console.WriteLine("connected");   -  person Usha phulwani    schedule 12.12.2018


Ответы (1)


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

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

Затем используйте один параметр в обратном вызове. Оберните 2 параметра, которые у вас есть, в один класс/объект.

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

person reckface    schedule 12.12.2018
comment
Я собираюсь попробовать это сейчас ... и дам вам знать - person Usha phulwani; 13.12.2018
comment
Удивительно... Это сработало как по волшебству... Просто использовал con.start.wait() после proxy.On(). Большое вам спасибо .. Вы сэкономили мне кучу времени .. спаситель жизни ... я бы не смог поймать эту штуку так скоро .. Так что спасибо вам ... - person Usha phulwani; 13.12.2018