WebAPI防止竞争条件

时间:2015-05-21 20:01:34

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

我有一个WebAPI POST控制器方法,基本上只是将带有数量值的记录插入表中。我需要根据可用数量检查该数量。问题是我可以同时发生多个提交,并希望消除任何可能的竞争条件。

有很多方法可以做到这一点,但我正在努力确定最佳方法。我想过使用一个队列,但是客户端设备需要进行检查以查看状态。我想过使用单例模式,但客户端必须等待发布。

任何人都有任何指示?

1 个答案:

答案 0 :(得分:4)

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

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

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

一种方法是Optimistic Concurrency。让数据库(或您的ORM(即实体框架))告诉您数量计数器是否过时,如果它是陈旧的,再次查询并验证可用数量是否仍然有效。

您需要了解如何为数据库实施Optimistic Concurrency。简而言之,它是桌面上无法盲目修改的时间戳。当更新发送到数据库时,它包含在更新之前检查过的时间戳值,如果它仍然匹配,则事务通过,如果值不同,则事务被中止。

相关问题