Saltar al contenido

SignalR: notificación del progreso de una operación prolongada desde la API web de ASP.NET Core al cliente de Angular 7

Ya no tienes que indagar más en internet porque estás al sitio correcto, poseemos la respuesta que deseas y sin liarte.

Solución:

Parece que finalmente lo he encontrado. El problema probablemente se debió a una identificación incorrecta, así que comencé a buscar una solución. Una publicación (https://github.com/aspnet/SignalR/issues/2200) me guió al uso de grupos, que parece la solución recomendada en estos casos. Entonces, cambié mi concentrador para que asigne automáticamente la ID de conexión actual a un grupo de “progreso”:

public sealed class ProgressHub : Hub

    public const string GROUP_NAME = "progress";

    public override Task OnConnectedAsync()
    
        // https://github.com/aspnet/SignalR/issues/2200
        // https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/working-with-groups
        return Groups.AddToGroupAsync(Context.ConnectionId, "progress");
    

Ahora, mi método de controlador API es:

[HttpGet("lengthy")]
public async Task Lengthy()

    await _progressHubContext
        .Clients
        .Group(ProgressHub.GROUP_NAME)
        .SendAsync("taskStarted");
    for (int i = 0; i < 100; i++)
    
        Thread.Sleep(200);
        Debug.WriteLine($"progress=i + 1");
        await _progressHubContext
            .Clients
            .Group(ProgressHub.GROUP_NAME)
            .SendAsync("taskProgressChanged", i + 1);
    
    await _progressHubContext
        .Clients
        .Group(ProgressHub.GROUP_NAME)
        .SendAsync("taskEnded");

    return Ok();

Y, por supuesto, actualicé el código del cliente en consecuencia, para que ya no tenga que enviar una identificación al invocar el método API.

Repositorio de demostración completo disponible en https://github.com/Myrmex/signalr-notify-progress.

Recuerda que tienes autorización de interpretar si diste con la solución.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *