0

如何避免两个不同的用户同时为同一个人提交相同的请求?这是一个以 SQL 服务器为后端的帮助台 ASP.NET 网络表单应用程序。

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

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

4

2 回答 2

1

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

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

但是,上述规则过于笼统,可能会导致丢失有效请求。所以我建议如下:

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

您对存储过程的说明还不够多,无法建议如何修复它,但在我看来,任何像这样的阻塞都应该在应用程序代码中实现。您可以使用 ConcurrentDictionary 来跟踪当前正在运行的请求并阻止直到它们完成或返回某种错误。

也就是说,这听起来像是一个错误的功能。你确定这是必需的吗?对于您要解决的大问题,是否有更好的解决方案?

于 2013-05-08T23:35:03.080 回答