添加有关如何注入/访问 DBContext 或有关 SignalR 中作用域服务的文档

作者: TrieBr创建于 2018年11月21日更新于 2026年9月16日
标签Pri1Source - Docs.msSignalRdoc-bug

文档没有说明如何在 SignalR 中注入和处理 DBContext 或作用域服务,我认为这应该是一个相当常见的场景。Hubs 的生命周期为 `Transient`。根据依赖注入文档,它提到"使用数据库上下文的服务还应使用作用域生命周期"。不清楚 signalR 中如何处理作用域服务。我目前遇到了一个问题,导致 DBContext 中间断性地出现错误 `A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.`。我感觉这与我的 `Scoped` DBContext 和 `Transient` Hub 的区别有关。在正常的 HTTP 请求中,很明显在每个 http 请求的开始都会创建一个 "Scoped" 服务。但是在 WebSocket 场景中,何时创建 Scoped 服务?是否在套接字建立连接时创建 Scoped 服务,并在套接字断开连接时结束作用域?看起来我的问题是由于一个 Transient Hub 使用相同的作用域服务来调用多个 Hub 方法,导致上述的线程错误。

内容来源: dotnet/AspNetCore.Docs