首頁 > 後端開發 > C++ > 如何從 ASP.NET Core 控制器呼叫 SignalR Hub 方法?

如何從 ASP.NET Core 控制器呼叫 SignalR Hub 方法?

Susan Sarandon
發布: 2025-01-05 03:32:39
原創
863 人瀏覽過

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

從 Controller 呼叫 SignalR Core Hub 方法

SignalR Core 為 ASP.NET Core 應用程式提供了強大的即時通訊機制。本文解決了從控制器呼叫 SignalR 集線器方法的常見場景。

提供的範例示範了需要在完成從 Windows 服務啟動的外部操作時通知連線的用戶端。由於該服務無法直接與 SignalR 交互,因此我們探索了兩種潛在的解決方案。

解決方案1:使用IHubContext

將所需集線器的IHubContext 注入控制器:

public class VarDesignCommController : Controller
{
    public VarDesignCommController(IHubContext<VarDesignHub> hubcontext)
    {
        HubContext = hubcontext;
    }
    ...
}
登入後複製

然後調用hub 方法:

await this.HubContext.Clients.All.InvokeAsync("Completed", id);
登入後複製

解決方案2:使用Typed Hubs

為了更精細的控制,建立一個類型化的客戶端介面:

public interface ITypedHubClient
{
    Task BroadcastMessage(string name, string message);
}
登入後複製

繼承Hub 類別並定義客戶端方法:

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

Inject類型化的集線器上下文並呼叫方法:

// 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" };
    }
}
登入後複製

以上是如何從 ASP.NET Core 控制器呼叫 SignalR Hub 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板