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!