Maison > développement back-end > C++ > Comment appeler une méthode SignalR Hub à partir d'un contrôleur ASP.NET Core ?

Comment appeler une méthode SignalR Hub à partir d'un contrôleur ASP.NET Core ?

Susan Sarandon
Libérer: 2025-01-05 03:32:39
original
920 Les gens l'ont consulté

How to Call a SignalR Hub Method from an ASP.NET Core Controller?

Appel de la méthode SignalR Core Hub à partir du contrôleur

SignalR Core fournit un puissant mécanisme de communication en temps réel pour les applications ASP.NET Core. Cet article aborde le scénario courant d'appel d'une méthode hub SignalR à partir d'un contrôleur.

L'exemple fourni démontre la nécessité de notifier les clients connectés à la fin d'une opération externe initiée à partir d'un service Windows. Étant donné que le service ne peut pas interagir directement avec SignalR, nous explorons deux solutions potentielles.

Solution 1 : Utiliser IHubContext

Injecter le IHubContext du hub souhaité dans le contrôleur :

public class VarDesignCommController : Controller
{
    public VarDesignCommController(IHubContext<VarDesignHub> hubcontext)
    {
        HubContext = hubcontext;
    }
    ...
}
Copier après la connexion

Ensuite, invoquez la méthode hub :

await this.HubContext.Clients.All.InvokeAsync("Completed", id);
Copier après la connexion

Solution 2 : Utilisation de Typed Hubs

Pour un contrôle plus granulaire, créez une interface client typée :

public interface ITypedHubClient
{
    Task BroadcastMessage(string name, string message);
}
Copier après la connexion

Héritez de la classe Hub et définissez la méthode côté client :

public class ChatHub : Hub<ITypedHubClient>
{
    public void Send(string name, string message)
    {
        Clients.All.BroadcastMessage(name, message);
    }
}
Copier après la connexion

Injecter le contexte hub tapé et invoquez la méthode :

// In VarDesignCommController
[Route("api/demo")]
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" };
    }
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal