Memanggil Kaedah Hab Teras SignalR daripada Pengawal Teras Asp.Net
Dalam artikel ini, kami akan meneroka cara menggunakan kaedah Hab Teras SignalR dari dalam pengawal Teras ASP.NET. Fungsi ini membolehkan komunikasi sisi pelayan kepada pelanggan yang disambungkan untuk menyiarkan acara atau mengemas kini data masa nyata.
Tinjauan Keseluruhan Masalah
Dalam senario yang disediakan, ASP.NET Aplikasi teras menerima permintaan daripada perkhidmatan Windows setelah tugas selesai. Tugasnya adalah untuk memberitahu semua pelanggan SignalR Core yang berkaitan tentang acara ini. Walau bagaimanapun, perkhidmatan Windows tidak boleh terus mewujudkan sambungan kepada SignalR.
Penyelesaian 1: Menyuntik HubContext ke dalam Pengawal
Satu pendekatan ialah menyuntik HubContext yang sesuai ke dalam kelas pengawal . Ini membolehkan penggunaan terus kaedah hab daripada kaedah tindakan pengawal.
[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; } }
Pendekatan ini membenarkan komunikasi terus dengan semua pelanggan yang berkaitan, tetapi mungkin mempunyai implikasi prestasi bergantung pada bilangan pelanggan.
Penyelesaian 2: Hab Ditaip dan Antara Muka Pelanggan
Pendekatan lain melibatkan penentuan antara muka pelanggan yang ditaip dan mewarisi daripada Hab yang sepadan dengan antara muka pelanggan yang ditaip. Ini membolehkan suntikan HubContext yang ditaip ke dalam pengawal untuk pemanggilan kaedah tertentu.
Antara Muka Pelanggan Ditaip:
public interface ITypedHubClient { Task BroadcastMessage(string name, string message); }
Hub Mewarisi daripada Antara Muka Pelanggan Ditaip :
public class ChatHub : Hub<ITypedHubClient> { public void Send(string name, string message) { Clients.All.BroadcastMessage(name, message); } }
Pengawal Invokasi Suntikan dan Kaedah:
[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" }; } }
Pendekatan ini membolehkan komunikasi yang lebih disasarkan dan cekap dengan pelanggan.
Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Hab Teras SignalR daripada Pengawal Teras ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!