ASP.Net Web服务同步调用进程数据库队列

时间:2017-09-22 06:53:39

标签: c# asp.net sql-server multithreading wcf

我有一个asp.net网络服务,就像一个预订系统,不能由多人保留相同的座位,并且预订的资格是基于SQL服务器中的一些其他表值。我打算使用here提到的SQL服务器队列处理。我的客户希望在同步调用中执行此操作,这意味着我们希望在同一Web服务方法调用中获得结果。我的问题是允许同步方法调用处理队列并等待队列返回值(通过一段时间内的循环)的效率。请告知最佳方法以实现此目的。

1 个答案:

答案 0 :(得分:1)

您正在踩XY problem trap。您的主要目标是确保没有座位可以预留两次。您应该重新考虑使用队列的方法是解决此问题的适当方法。队列非常适合在后台任务上有效地使用处理资源。对于实时处理(像你的一样),它会产生更多的问题,并解决它。

似乎您希望避免多个用户尝试两次访问同一座位时发生的竞争条件。队列无法解决问题,您只需将其移至排队阶段即可。首先进入队列的人获胜。最后,你添加了一个不必要的复杂功能,不会给你带来任何好处。

解决您问题的一个更简单的方法是在您的数据库上创建一个唯一的密钥,以确保无法保留任何座位两次。一旦你试图保留刚才采取的座位,你将获得error number 2627的SQLException。然后,您可以提示用户该座位已被占用。