如何避免两个不同的用户同时为同一个人提交相同的请求

时间:2013-05-08 15:20:17

标签: c# asp.net sql-server transactions

如何避免两个不同的用户同时为同一个人提交相同的请求? 这是一个以SQL Server作为后端的帮助台ASP.NET webforms应用程序。

我的存储过程中有一个事务块,用于插入请求表。

但是当我的同事和我在几毫秒内测试了这个场景时,我们的请求甚至选择了我们在存储过程中验证重复的相同选项。

2 个答案:

答案 0 :(得分:1)

首先,您需要定义用于比较2个请求是否相同的逻辑。

根据您提供给我们的信息,我能看到的唯一变量是(a)人(b)时间。 例如,如果(a)它们属于同一个人id并且(b)在彼此的X分钟内被记录,则可以认为2个请求是相同的。

但是,上述规则过于通用,可能导致失去有效请求。所以我建议如下:

  1. 调查为什么多个用户可以提交相同的请求。这种情况的频率是多少?它发生的原因是什么?有了这些知识,您可能会得到一个非常不同的更好的解决方案。
  2. 检查要添加到规则的其他变量,例如请求类型,应用程序。
  3. 如果重复请求的频率非常低,请考虑使用通用规则,每当您检测到重复时,请将其显示给用户,并要求确认添加或取消其新请求。

答案 1 :(得分:0)

你还没有充分说明你的存储过程建议如何解决它,但在我看来,这样的任何阻塞应该在应用程序代码中实现。您可以使用ConcurrentDictionary来跟踪当前正在运行的请求,并阻止它们完成或返回某种错误。

那就是说,这听起来像是一个错误的特征。你确定这是必需的吗?是否有更好的解决方案来解决您想要解决的重大问题?