Клиент SignalR C # не вызывает метод - PullRequest
0 голосов
/ 13 февраля 2019

Я создал сервер с SignalR и SQLTableDependency.После этого я создал проект с Vue и SignalR Javascript Client и все работает, подписка на уведомления на сервере выполняет метод SignalR для отправки объекта всем Клиентам

private void Changed(object sender, RecordChangedEventArgs<Todo> eventArgs)
    {
        if(eventArgs.ChangeType != TableDependency.SqlClient.Base.Enums.ChangeType.None)
        {
            var changedEntity = eventArgs.Entity;
            var mensaje = TipoCambios(eventArgs);
            _hubContext.Clients.All.SendAsync("RegistrarTarea", changedEntity);
        }
    }

В JavaScript Client я сделал это:

coneccionTodo.on("RegistrarTarea", todos => {
    this.$refs.alerta.Abrir(todos.cambio, "info", "Alerta");
    console.log(todos);
  });
  coneccionTodo
    .start()
    .then(response => {
      this.sinConexion = false;
    })
    .catch(error => {
      console.log("Error Todo SignalR", error.toString());
    });

Результат этого таков:

enter image description here

И, наконец, мой клиент C # сделан с .Net Core 2.1.Это не работает

public static async Task Ejecutar() {
    connection.On<List<dynamic>>("RegistrarTarea", (objects) => {
        Console.WriteLine(objects);
    });
    try
    {                                
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine($"Conexión exitosa a {url}");
        await connection.StartAsync();
        //await connection.InvokeAsync("RegistrarTarea", "Consola", true);
    }
    catch (Exception ex)
    {
        SignalR_Exception(ex);
    }
}

В void main Консольном приложении я вызываю метод Ejecutar:

    connection = new HubConnectionBuilder().WithUrl(url).Build();
    connection.Closed += async (error) => {
        await Task.Delay(new Random().Next(0, 5) * 1000);
        await connection.StartAsync();
    };
    Task.Run(() => Ejecutar());
    Console.ReadLine();

ПРИМЕЧАНИЕ. На сервере активируется CORS, чтобы разрешить что-либо.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Хорошо, в connection.on я использую список, но вместо этого я использовал класс со свойствами, такими как отправка сервером.Так что теперь, это работает:

    connection.On<Result>("RegistrarTarea", (result) => {                
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine(result.Cambio);
    });

enter image description here

0 голосов
/ 13 февраля 2019

Вы используете прямой режим?Прямой режим не работает с этим.Выключите прямой режим.

...