有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?

Posted

技术标签:

【中文标题】有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?【英文标题】:Is there a way to get realtime logged in users in Asp.net zero public site (Asp.net MVC)? 【发布时间】:2022-01-22 02:39:59 【问题描述】:

我正在使用 Asp.net 零 [版本 10.2.0] 制作 Web 应用程序 使用 ABP 框架 6.2 版 前端在 Angular 11 中,后端 API 在 Asp.net core 5.0 中,而公共网站在 Asp.net MVC 中。

我正在尝试使用 SignalR 在前端(Angular)和公共(Asp.net MVC)网站上获取登录用户,以在管理仪表板上显示它。两者都使用相同的数据库表 ABPUsers。有没有人用 SignalR 或其他方式做过类似的事情?

任何帮助表示赞赏

【问题讨论】:

【参考方案1】:

我在 ASP.NET(不是 Core)上使用 SignalR 做了类似的事情。我在Hub 类中重载了OnConnectedOnDisconnected 方法,以保留我自己的连接客户端字典。

每个客户端都有一个包含其登录信息的标题。在OnConnected 中,我将解析标头并检查此客户端是否已连接。如果不是,我会将它们添加到字典中。在OnDisconnected 中,我会检查此客户端是否已连接,如果已连接,请将其从字典中删除。这样,字典总是有连接的客户端。

注意:因为每次新登录都会创建一个新的Hub,所以字典必须是单例或静态的。我使用 静态 ConcurrentDictionary

注意 2: SignalR 具有用于存储所有客户端的内部结构,但如果不修改库就无法轻松搜索,并且公共方法非常有限。这就是我使用自己的字典的原因。

【讨论】:

请注意,一个客户端/登录可以打开多个选项卡。因此,您需要为用户保存特定的连接 ID,并且只将其从您的集合中删除。当一个用户的所有连接 ID 都被删除时,该用户就会断开连接。 我使用标头数据来识别特定的客户/用户。 ConnectionID 对此没有用处。

以上是关于有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 帮助(使用公共 Web 服务)

如何在不停止站点的情况下更新 ASP.Net 站点 dll

有没有办法让图像通过 ASP.NET 和 app_offline.htm 显示?

如何确定 ASP.NET 站点 (IIS) 上的用户数?他们的信息呢?

在 MVC 之外使用 ASP.Net MVC 数据注释

在 ASP.net MVC 站点中查看 s-s-rS 报告