同时访问MVC .NET上的数据

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

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

我不能在数据库方面这样做,所以必须是一个应用程序解决方案,对用户完全不可见……

我该如何解决这个问题?

—编辑

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

我有一些想法:

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

  • 在我的webapp上使用静态ConcurrentBag来检查id列表。 (IIS回收会杀死该列表吗?)

谢谢

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

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

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

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

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

希望这可以帮助。