Asp.Net Core SignalR实现中无法访问已释放AdminContext实例问题排查
集成SignalR实现Angular端实时数据推送时出现AdminContext上下文已释放报错
正在尝试集成SignalR,为Angular前端应用提供实时数据推送能力。已检索谷歌平台上所有可查询到的同类问题解决方案,仍未解决当前开发问题,具体报错信息如下:
无法访问已释放的上下文实例。造成该错误的常见原因是:从依赖注入容器解析得到的上下文实例被释放后,仍在应用的其他位置尝试复用同一上下文实例。该问题通常发生在对上下文实例手动调用Dispose方法,或是将上下文包裹在using语句中使用的场景。若使用依赖注入模式,应当交由DI容器负责上下文实例的全生命周期释放逻辑。本次报错涉及的对象为
AdminContext。
各层相关实现代码
- 控制器层代码
[Route("api/[controller]")] [ApiController] public class ChartController : ControllerBase { private IHubContext<ChartHub> _hub; private readonly ILiveMonitoringService _service; public ChartController(IHubContext<ChartHub> hub, ILiveMonitoringService service) { _hub = hub; _service = service; } public IActionResult Get() { var timerManager = new TimerManager(async () => await _hub.Clients.All.SendAsync("transferchartdata", await _service.GetAllAsync())); return Ok(new { Message = "Request Completed" }); } }
- 服务层代码
public Task<List<LiveMonitoring>> GetAllAsync() { return _repository.GetAll().Take(100).ToListAsync(); }
- 仓储层代码
public IQueryable<TEntity> GetAll() { try { return _adminContext.Set<TEntity>(); } catch (Exception ex) { throw new Exception("Couldn't retrieve entities"); } }
请协助定位上述场景下问题的根本成因。
内容的提问来源于stack exchange,提问作者Gerald Hughes
相关产品推荐
相关产品推荐

