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

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

DDD
發布: 2025-01-05 13:47:41
原創
741 人瀏覽過

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

從Asp.Net Core 控制器呼叫SignalR Core Hub 方法

在本文中,我們將探討如何呼叫SignalR Core Hub 方法來自ASP.NET Core 控制器內。此功能允許伺服器端與連接的客戶端通訊以廣播事件或更新即時資料。

問題概述

在提供的場景中,ASP.NET任務完成後,核心應用程式接收來自 Windows 服務的請求。任務是通知所有連接的 SignalR Core 用戶端有關此事件的資訊。但是,Windows 服務無法直接與 SignalR 建立連線。

解決方案 1:將 HubContext 注入到 Controller

一種方法是將適當的 HubContext 注入到控制器類別中。這使得可以從控制器的操作方法直接呼叫集線器方法。

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

此方法允許與所有連接的客戶端直接通信,但可能會產生效能影響,具體取決於客戶端的數量。

解決方案2:類型化集線器和客戶端介面

另一種方法涉及定義類型化客戶端介面和從具有類型化客戶端介面的相應集線器繼承。這使得可以將類型化的 HubContext 注入到控制器中以進行特定的方法呼叫。

類型化客戶端介面:

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

控制器注入與方法呼叫:

[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 Core Hub 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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