Heim >Backend-Entwicklung >C++ >Wie rufe ich eine SignalR-Hub-Methode von einem ASP.NET Core-Controller auf?

Wie rufe ich eine SignalR-Hub-Methode von einem ASP.NET Core-Controller auf?

Susan Sarandon
Susan SarandonOriginal
2025-01-05 03:32:39873Durchsuche

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

SignalR Core Hub-Methode vom Controller aufrufen

SignalR Core bietet einen leistungsstarken Echtzeit-Kommunikationsmechanismus für ASP.NET Core-Anwendungen. Dieser Artikel befasst sich mit dem häufigen Szenario des Aufrufs einer SignalR-Hub-Methode von einem Controller.

Das bereitgestellte Beispiel zeigt die Notwendigkeit, verbundene Clients über den Abschluss eines externen Vorgangs zu benachrichtigen, der von einem Windows-Dienst initiiert wurde. Da der Dienst nicht direkt mit SignalR interagieren kann, untersuchen wir zwei mögliche Lösungen.

Lösung 1: IHubContext verwenden

Injizieren Sie den IHubContext für den gewünschten Hub in den Controller:

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

Dann rufen Sie die Hub-Methode auf:

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

Lösung 2: Typed verwenden Hubs

Für eine detailliertere Steuerung erstellen Sie eine typisierte Client-Schnittstelle:

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

Von der Hub-Klasse erben und die clientseitige Methode definieren:

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

Inject Geben Sie den typisierten Hub-Kontext ein und rufen Sie die Methode auf:

// 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" };
    }
}

Das obige ist der detaillierte Inhalt vonWie rufe ich eine SignalR-Hub-Methode von einem ASP.NET Core-Controller auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn