Maison >développement back-end >C++ >Comment puis-je intégrer les méthodes SignalR Hub dans les contrôleurs ASP.NET Core ?

Comment puis-je intégrer les méthodes SignalR Hub dans les contrôleurs ASP.NET Core ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 04:20:40397parcourir

How Can I Integrate SignalR Hub Methods into ASP.NET Core Controllers?

Intégration des méthodes SignalR Core Hub dans les contrôleurs ASP.NET Core

Cette enquête approfondit l'intégration des méthodes SignalR Core Hub dans un ASP.NET Contrôleur principal. Le cas d'utilisation spécifique consiste à recevoir une demande de publication d'un service Windows, qui interagit avec des programmes externes, une fois la tâche terminée, et à diffuser ces informations aux clients SignalR connectés.

Solution 1 : accéder directement à HubContext

Injectez l'interface IHubContext dans le contrôleur :

public VarDesignCommController(IHubContext<VarDesignHub> hubcontext)
{
    HubContext = hubcontext;
    ...
}

private IHubContext<VarDesignHub> HubContext
{ get; set; }

Ensuite, appelez directement les méthodes sur tous les clients en utilisant :

await this.HubContext.Clients.All.InvokeAsync("Completed", id);

Cette approche exécute des méthodes sur tous les clients connectés, fournissant une solution simple et rapide.

Solution 2 : exploiter les hubs typés

Définir une interface pour représenter les appels de méthodes côté serveur sur les clients :

public interface ITypedHubClient
{
    Task BroadcastMessage(string name, string message);
}

Créer un Hub héritant de Hub :

public class ChatHub : Hub<ITypedHubClient>
{
    public void Send(string name, string message)
    {
        Clients.All.BroadcastMessage(name, message);
    }
}

Injectez le contexte du hub typé et travaillez avec lui dans le contrôleur :

public class DemoController : Controller
{
    IHubContext<ChatHub, ITypedHubClient> _chatHubContext;
    public DemoController(IHubContext<ChatHub, ITypedHubClient> chatHubContext)
    {
        _chatHubContext = chatHubContext;
    }

    [HttpGet]
    public IEnumerable<string> Get()
    {
        _chatHubContext.Clients.All.BroadcastMessage("test", "test");
        return new string[] { "value1", "value2" };
    }
}

Cette approche utilise des clients hub typés, permettant un meilleur contrôle et une plus grande lisibilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn