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.
Injecter le IHubContext du hub souhaité dans le contrôleur :
public class VarDesignCommController : Controller { public VarDesignCommController(IHubContext<VarDesignHub> hubcontext) { HubContext = hubcontext; } ... }
Ensuite, invoquez la méthode hub :
await this.HubContext.Clients.All.InvokeAsync("Completed", id);
Pour un contrôle plus granulaire, créez une interface client typée :
public interface ITypedHubClient { Task BroadcastMessage(string name, string message); }
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); } }
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" }; } }
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!