我了解SignalR为什么不给您access to the HttpContext。但是,这对我们来说是个大问题。让我解释一下:
我们的应用程序是一个多租户应用程序,用户可以在其中登录时选择环境。这基本上是将ConnectionStringName注册到HttpSession中。在SignalR集线器中,我们需要访问Disconnect
上的数据库。但这是不可能的,因为此时我们还没有HttpContext并且无法确定要写入的环境。
任何人都可以向我们提出如何解决此问题的建议吗?我们对此有些卡住。
EDIT:如果您的解决方案在负载均衡的环境中工作,则可获得加分。
这是一个古老的问题,但是我留给我答案,以防万一它对那里的任何人都有用。
由于您的集线器扩展Microsoft.AspNet.SignalR.Hub,它可以访问类型为[[HubCallerContext]的Context属性。此属性公开了来自调用方的许多信息:
Context.User.Identity.Name
OnConnnect
和OnDisconnect以维护与用户关联的连接列表。您还可以存储其他所需的信息以及连接ID(根据您的情况,您的用户连接字符串)。