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