c# - WebAPI 防止竞争条件

标签 c# sql-server asp.net-web-api

我有一个 WebAPI POST Controller 方法,它基本上只是将带有数量值的记录插入到表中。我需要根据可用数量检查该数量。问题是我可以同时进行多个提交,并且想消除任何可能的竞争条件。

有很多方法可以做到这一点,但我正在尝试确定最佳方法。我想到了使用队列,但随后客户端设备将需要进行检查以查看状态。我想到了使用单例模式,但是客户端将不得不等待发布。

谁有什么指点?

最佳答案

您的问题与WebAPI无关,而是与您的数据和数据管理层有关。 WebAPI 不应该关心数据,它的作用是接受请求并发回响应。响应取决于输入数据、验证、业务逻辑等。

你的问题是经典的并发控制问题。答案有很多,正确的答案取决于您的系统和架构。

我假设您的数据库事务涉及这些步骤? : 1)新记录插入数量 2)数量更新(新总数=总数-数量) 它们必须一起发生还是根本不会发生?

一种方法是 Optimistic Concurrency .让数据库(或您的 ORM(即 Entity Framework ))告诉您数量计数器是否过时,如果过时,请再次查询并验证可用数量是否仍然有效。

您需要通过谷歌搜索如何为您的数据库实现开放式并发。简单来说就是表上的时间戳,不能盲目修改。当更新被发送到数据库时,它包含更新前检查过的时间戳值,如果仍然匹配,则事务通过,如果值不同,则事务中止。

关于c# - WebAPI 防止竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383290/

相关文章:

c# - 将 char 数据类型转换为 datetime 数据类型导致日期时间值超出范围错误

c# - 在 .net 中发送 SMTP 电子邮件测试 Microsoft Office 365

php - 将 PHP 字符串作为 SQL 命令传递并保留换行符

sql-server - 从远程服务器文件系统上的 .xlsx 或 .csv 文件获取数据的 OPENROWSET 或 OPENDATASOURCE 示例

asp.net-mvc - 使用Forms身份验证跨域

c# - 使用 radioButton CheckedChanged 事件停止对函数的双重调用?

c# - 从基类 C# 调用子类方法

sql-server - 如何在 SQL Server 中编写任意数量的参数函数

c# - 在 REST WCF Web API 中使用 Windows 身份验证对用户进行身份验证

WebApi 上的 AngularJS 和 OWIN 身份验证