我有一个MVC网站,可以从数据库访问进程列表并选择“随机”进程,以便用户可以进行分析。他可以批准或不批准该程序并自动接收另一个程序。
问题是有几个用户会同时执行此过程,我需要阻止那些已经在审核的过程。
我无法在数据库方面做到这一点,因此必须是应用程序解决方案并且对用户完全不可见......
我该如何解决这个问题?
---编辑
一种情况是:用户获取进程(进程被锁定),而不是“忘记”打开或“关闭”浏览器。 所以我需要以某种方式解锁这个过程。
我有一些想法:
使用MSMQ(当用户“忘记”完成任务时,是否可以放回进程?)
在我的webapp上使用静态ConcurrentBag来查看ID列表。 (IIS会循环杀死该列表吗?)
由于
答案 0 :(得分:2)
如果数据库表不是一个选项,您可以创建一个内存缓存,您可以在其中存储正在审核的ID。每次有人开始审核时,请检查内存缓存以查看是否存在要审核的ID。如果不存在,则将新id添加到内存缓存中。(您可以在内存缓存中存储Ids列表)。
您可以使用MemoryCache类来实现此目的。
请记住,这是内存中的。因此,您的应用池重置可以清除内存。此外,如果将来有多台服务器,这可能不起作用(跨服务器共享缓存问题!)。在这种情况下,您需要一个集中的位置来保存此信息。我的建议是你的sql server中的db表。
答案 1 :(得分:0)
为什么不使用System.Web.HttpContext.Current.Application?
您可以创建一个自定义类来保留进程的ID并管理访问权限。
希望这有帮助。