SignalR Core Hub-Methoden vom Asp.Net Core Controller aufrufen
In diesem Artikel erfahren Sie, wie Sie SignalR Core Hub-Methoden aufrufen aus einem ASP.NET Core-Controller heraus. Diese Funktionalität ermöglicht die serverseitige Kommunikation mit verbundenen Clients, um Ereignisse zu übertragen oder Echtzeitdaten zu aktualisieren.
Problemübersicht
Im bereitgestellten Szenario ein ASP.NET Die Kernanwendung empfängt nach Abschluss der Aufgabe eine Anfrage von einem Windows-Dienst. Die Aufgabe besteht darin, alle verbundenen SignalR Core-Clients über dieses Ereignis zu benachrichtigen. Allerdings kann der Windows-Dienst keine direkte Verbindung zu SignalR herstellen.
Lösung 1: HubContext in Controller einfügen
Ein Ansatz besteht darin, den entsprechenden HubContext in die Controller-Klasse einzufügen . Dies ermöglicht den direkten Aufruf von Hub-Methoden aus den Aktionsmethoden des Controllers.
[Route("API/vardesigncomm")] public class VarDesignCommController : Controller { [HttpPut("ProcessVarDesignCommResponse/{id}")] public async Task<IActionResult> ProcessVarDesignCommResponse(int id) { await this.HubContext.Clients.All.InvokeAsync("Completed", id); return new JsonResult(true); } private IHubContext<VarDesignHub> HubContext { get; set; } }
Dieser Ansatz ermöglicht die direkte Kommunikation mit allen verbundenen Clients, kann jedoch je nach Anzahl der Clients Auswirkungen auf die Leistung haben.
Lösung 2: Typisierte Hubs und Client-Schnittstellen
Ein anderer Ansatz besteht darin, eine typisierte Client-Schnittstelle zu definieren und von dieser zu erben der entsprechende Hub mit der typisierten Client-Schnittstelle. Dies ermöglicht die Injektion des typisierten HubContext in den Controller für bestimmte Methodenaufrufe.
Typisierte Client-Schnittstelle:
public interface ITypedHubClient { Task BroadcastMessage(string name, string message); }
Hub erbt von der typisierten Client-Schnittstelle :
public class ChatHub : Hub<ITypedHubClient> { public void Send(string name, string message) { Clients.All.BroadcastMessage(name, message); } }
Controller-Injektion und Methode Aufruf:
[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" }; } }
Dieser Ansatz ermöglicht eine gezieltere und effizientere Kommunikation mit Kunden.
Das obige ist der detaillierte Inhalt vonWie rufe ich SignalR Core Hub-Methoden von einem ASP.NET Core Controller auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!