Клиент не получает push-концентратор с SignalR - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть следующий концентратор:

public class MyHub : Hub
{
    public static HubLifetimeManager<MyHub> HubManager { get; private set; }
    public MyHub(HubLifetimeManager<MyHub> hubManager)
    {
        HubManager = hubManager;
    }

    public string SayHello()
    {
        return "hello! " + DateTime.UtcNow;
    }
}

, и я отправляю события через равные промежутки времени, например:

private static void TickTimer(object State)
{
    var Time = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture);
    var A = MyHub.HubManager;
    if (A != null)
    {
        A.SendAllAsync("Update", new object[] { Time });
    }
}

На стороне клиента я использую следующий код:

        var Connection = new HubConnectionBuilder()
            .WithUrl("http://localhost:8000/myhub")
            .Build();

        Connection.On("Update", () => Console.WriteLine("Update")); DOESN'T WORK
        Connection.On("Update", (object[] O) => Console.WriteLine("AA")); DOESN'T WORK EITHER

        var StartAsync = Connection.StartAsync();
        StartAsync.Wait();

Что я пропустил?


Обновление:

Я добавил ведение журнала и обнаружил следующее:

Не удалосьсвязать аргументы, полученные при вызове '(null)' из 'Update'.System.IO.InvalidDataException: вызов предоставляет 1 аргумент (ов), но цель ожидает 0. в Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.BindArguments (считыватель JsonTextReader, IReadOnlyList`1 paramTypes)

Проблемабыло просто, что список параметров не был тем же самым.Но если ведение журнала не включено, SignalR просто проглатывает ошибки, и ничего не видно.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Обратите внимание, что вы отправляете только один аргумент :

A.SendAllAsync ("Обновление", новый объект [] {Время});

Поэтому я изменяю On() на следующее:

Connection.On<DateTime>("Update", (s) => Console.WriteLine("AA"+s.ToString()));

И у меня это прекрасно работает

enter image description here

0 голосов
/ 24 апреля 2019

попробуйте это:

  Connection.On<object[]>("Update", (data) =>
            {
                Console.WriteLine("AA");
                //TO DO
            });
...