Asp.Net Core SignalR获取集线器实例,从集线器外部发送消息
https://blog.csdn.net/u011127019/article/details/90812008
一、从控制器中获取IHubContext 操作发送消息
此种方式,常用简单
public class HomeController : Controller
{
private readonly IHubContext<NotificationHub> _hubContext;
public HomeController(IHubContext<NotificationHub> hubContext)
{
_hubContext = hubContext;
}
}
public async Task<IActionResult> Index()
{
await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");
return View();
}
二、从中间件中获取IHubContext 操作发送消息
访问IHubContext中间件管道中如下所示:
app.Use(async (context, next) =>
{
var hubContext = context.RequestServices
.GetRequiredService<IHubContext<MyHub>>();
//...
});
三、从定时任务/从非Http请求中 获取IHubContext
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IHttpContextAccessor accessor)
{
MvcContext.Accessor = accessor;
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc();
//配置SignalR
app.UseSignalR(routes => routes.MapHub<CountHub>("/count"));
//启动定时任务
Task.Run(() =>
{
while (true)
{
var hubContext = app.ApplicationServices
.GetService<IHubContext<CountHub>>();
hubContext.Clients.All.SendAsync("someFunc", new { random = "定时任务" });
Thread.Sleep(1000);
}
});
}
四、从请求上下文中获取IHubContext 实例,此方式同控制器
public class MvcContext
{
public static IHttpContextAccessor Accessor;
public static HttpContext GetContext()
{
return Accessor.HttpContext;
}
}
public class HubOperate
{
public IHubContext<CountHub> GetHubOne()
{
return MvcContext.GetContext()
.RequestServices
.GetRequiredService<IHubContext<CountHub>>();
}
}
测试代码:
[Route("test1/{action}")]
public class Test1Controller : Controller
{
public IActionResult One()
{
HubOperate _hub = new HubOperate();
_hub.GetHubOne().Clients.All.SendAsync("someFunc", new { random = "efgh" });
return Content("执行完成");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)