Я создал сервер с 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());
});
Результат этого таков:
И, наконец, мой клиент 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, чтобы разрешить что-либо.