同时访问MVC .NET上的数据

时间:2015-10-26 12:07:39

标签: c# asp.net-mvc concurrency

我有一个MVC网站,可以从数据库访问进程列表并选择“随机”进程,以便用户可以进行分析。他可以批准或不批准该程序并自动接收另一个程序。

问题是有几个用户会同时执行此过程,我需要阻止那些已经在审核的过程。

我无法在数据库方面做到这一点,因此必须是应用程序解决方案并且对用户完全不可见......

我该如何解决这个问题?

---编辑

一种情况是:用户获取进程(进程被锁定),而不是“忘记”打开或“关闭”浏览器。 所以我需要以某种方式解锁这个过程。

我有一些想法:

  • 使用MSMQ(当用户“忘记”完成任务时,是否可以放回进程?)

  • 在我的webapp上使用静态ConcurrentBag来查看ID列表。 (IIS会循环杀死该列表吗?)

由于

2 个答案:

答案 0 :(得分:2)

如果数据库表不是一个选项,您可以创建一个内存缓存,您可以在其中存储正在审核的ID。每次有人开始审核时,请检查内存缓存以查看是否存在要审核的ID。如果不存在,则将新id添加到内存缓存中。(您可以在内存缓存中存储Ids列表)。

您可以使用MemoryCache类来实现此目的。

请记住,这是内存中的。因此,您的应用池重置可以清除内存。此外,如果将来有多台服务器,这可能不起作用(跨服务器共享缓存问题!)。在这种情况下,您需要一个集中的位置来保存此信息。我的建议是你的sql server中的db表。

答案 1 :(得分:0)

为什么不使用System.Web.HttpContext.Current.Application?

您可以创建一个自定义类来保留进程的ID并管理访问权限。

希望这有帮助。